Python 异常捕获与处理

这篇具有很好参考价值的文章主要介绍了Python 异常捕获与处理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、基础知识

1.1 什么是异常

当我们写程序难免遇到报错,专业的称呼叫做异常,行业俗语叫做bug,由于异常情况出现会导致代码停止运行,所以在编写过程中要尽可能避免。

1.2 异常分类

  • 语法错误
    这一类错误很好理解,相当于你不会写,比如用if或for的时候不知道他们怎么写,这种情况比较夸张了,好好学过的人都不会犯这种错误,一般来说这种错误发现了就是要准备跑路了。
  • 逻辑错误
    这种情况在编写的时候是允许出现的,通常来说都是代码结构完整,但是在调用的时候出了各种错误如:顺序错了或是变量用错了导致的异常。

1.3 异常的结构

我们可以分成三部分看:

  • 错误位置
    报错的位置是占最大部分的,我们从这里知道什么位置运行代码出错了,通常来说在错误位置很多的时候只用看最下面那个。
  • 错误类型
    最下面一行左边的几个单词是标志你的错误类型的,通常也不用管,起到提示作用
  • 错误详情
    这里比较关键,错误详情会把你错误的地方进行一个具体的解释,好让你找到错误并改正

二、异常类型

当我们在编写python代码的时候会出现各种原因导致的异常,这里我们可以举一些常见的例子:

  • AssertionError
    当 assert 语句失败时将被引发。用户利用断言语句检测异常时,如果断言语句检测的表达式为假,则会引发这种异常。

  • KeyError
    KeyError是关键字错误,当在现有键集合中找不到指定的映射(字典)键时就会引发错误。这个异常主要发生在字典中,比如当用户试图访问一个字典中不存在的键时会被引发。

  • NameError
    NameError是当某个局部或全局名称未找到时将被引发,也就是指变量名称发生错误,比如用户试图调用一个还未被赋值或初始化的变量时会被触发。

  • ValueError
    当操作或函数接收到具有正确类型但值不适合的参数,也就是值错误,比如想获取一个列表中某个不存在值的索引。

  • SystemError
    当解释器发现内部错误,但情况看起来尚未严重到要放弃所有希望时将被引发。 关联的值是一个指明发生了什么问题的字符串(表示为低层级的符号)。

  • SyntaxError
    SyntaxError主要是因为当解析器遇到语法错误,比如少个冒号、多个引号之类的,编程时稍微疏忽大意一下就会出错,应该是最常见的一种异常错误了。

  • TypeError
    TypeError是类型错误,当一个操作或函数被应用于类型不适当的对象时将被引发。比如在要求 int 时却传入了 list就会导致错误。

  • IndexError
    当序列抽取超出范围时将被引发,也就是索引超出范围,比如最常见下标索引超出了序列边界,比如当某个序列m只有三个元素,却试图访问m[4]。

  • StopIteration
    StopIteration为迭代器错误,由内置函数 next() 和 iterator 的 next() 方法所引发,用来表示该迭代器不能产生下一项。当访问至迭代器最后一个值时仍然继续访问,就会引发这种异常。

  • AttributeError
    AttributeError是属性错误,当属性引用或赋值失败时就会出现。比如列表有index方法,而字典却没有,所以对一个字典对象调用该方法就会引发该异常。

  • AttributeError
    访问的对象属性不存在

  • ImportError
    无法导入模块或者对象,主要是路径有误或名称错误

  • IndentationError
    代码没有正确对齐,主要是缩进错误

  • IOError
    输入/输出异常,主要是无法打开文件

  • OverflowError
    数值运算超出最大限制

  • TabError
    Tab和空格混用

  • ZeroDivisionError
    除法运算中除数0 或者 取模运算中模数为0

三、异常处理语法结构

在python中我们有专门的语法结构来应对一些将要出错的代码:

3.1 语法结构

try:
	待监测的代码(可能会出错的代码)
except 错误类型 as e:
	针对上述错误类型制定的方案

功能讲解:
1、try在这里可以看成是尝试的意思,相应的我们把需要监测的代码放里面运行。如果代码出现的错误是except中的,那么就用下面的子代码进行处理。

2、except后面的as e可以不写,写了的话会返回系统提示的报错信息。

3、当我们使用try监测代码的时候只能监测一个错误,当代码检测到第一个错误的时候就会输出提示信息然后停止代码的运行,后面的错误就不会被检测到。

4、这里我们也发现了,一个except只能应对一种错误类型,如果错误类型很多的话我们有两种选择,一种是写很多个except把错误类型写全,第二种选择是在错误类型处写上Exception/BaseException,就是后面要说的万能异常

try:
	待监测的代码(可能会出错的代码)
except 错误类型1 as e:  # e就是系统提示的错误信息
	针对上述错误类型1制定的方案
except 错误类型2 as e:  # e就是系统提示的错误信息
	针对上述错误类型2制定的方案
except 错误类型3 as e:  # e就是系统提示的错误信息
	针对上述错误类型3制定的方案
 	 ...

3.2 万能异常

对应的异常类型是:Exception/BaseException

两个异常类型作用一样,都包含所有的错误类型,但是BaseException是Exception的父代码。

try:
	待监测的代码(可能会出错的代码)
except Exception as e:  # e就是系统提示的错误信息
	针对各种常见的错误类型全部统一处理

3.3 try语法结构结合else和finally

try结构结合else和finall功能很简单:

1、else后面跟的子代码是在try的子代码正常运行的时候才会执行的

2、finally是不管try的子代码运行是否正确都会运行的代码

try:
	待监测的代码(可能会出错的代码)
except Exception as e:  # e就是系统提示的错误信息
	针对各种常见的错误类型全部统一处理
else:
	try的子代码正常运行结束没有任何的报错后 再执行else子代码
finally:
	无论try的子代码是否报错 最后都要执行finally子代码

注意事项
1、虽然异常处理可以防止代码报错停止运行,但是这并不意味着我们可以多用异常处理减少异常。

2、异常处理应该尽量少用,当出现无法控制的情况报错才考虑使用,如手机软件在无法访问网络的时候使用异常处理进行提示现在没网不能运行。

3、try语法结构下监测的代码应该尽量少一些。

四、异常处理补充

4.1 断言

断言就是对一段代码进行判断,如果判断结果正确就继续运行,如果判断错误了就抛出AssertionError异常,直接中断代码的运行。

name = 'jason'
# assert isinstance(name, int)
assert isinstance(name, str)
print('哈哈哈 我就说吧 肯定是字符串')
name.strip()

这里我们用isinstance判断数据的类型,如果把name绑定的字符串换成列表就会中断代码的运行抛出AssertionError异常。

4.2 主动抛出异常

跟上面的断言原理相似,当我运行代码检测到指定的数据值或条件的时候就直接抛出异常中断代码的运行。主动抛出异常需要用到raise这个方法,或是断言中的assert方法。

raise 异常类型名称(‘异常描述’)

try:
    if len(self._node_list) == 0:
        raise ValueError('Wrong parameter format')
except ValueError as e:
    print(e)

参考资料

Python 异常捕获与处理:https://www.cnblogs.com/wei0919/p/17201755.html文章来源地址https://www.toymoban.com/news/detail-420925.html

到了这里,关于Python 异常捕获与处理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python十类常见异常类型(附捕获以及异常处理方式)

    大家好,我是辣条哥!今天给大家讲讲我们刚开始写代码是都会出现的问题-我们刚开始常见的异常以及处理方法! 异常是指在程序运行过程中出现的错误或异常情况,例如除以0、访问不存在的变量等。Python提供了一些内置的异常类型,同时也支持自定义异常类型。 想找辣条

    2024年02月08日
    浏览(86)
  • java基础知识——25.异常

    这篇文章,我们来讲一下java的异常体系 目录 1.异常概述 2 java的异常继承体系 2.1 编译时异常 2.2 运行时异常 2.3 底层原理 2.4 异常的作用 3.异常的处理方式 3.1 JVM默认的处理方式 3.2 自己处理(捕获异常) 3.2.1自己处理的4个问题 3.2.2 异常中的常见方法 3.3 抛出处理 3.3.1 throws

    2024年02月01日
    浏览(54)
  • Java基础常考知识点(基础、集合、异常、JVM)

    作者: 逍遥Sean 简介:一个主修Java的Web网站游戏服务器后端开发者 主页:https://blog.csdn.net/Ureliable 觉得博主文章不错的话,可以三连支持一下~ 如有需要我的支持,请私信或评论留言! 本文收集Java核心的面试常考知识点,码起面试之前复习!!! JDK(Java SE Development Kit) ,

    2024年02月07日
    浏览(57)
  • 【基础知识】什么是哈希冲突?

    哈希表(Hash Table)是一种数据结构,它可以快速地在大量数据中查找、插入和删除时数据。哈希表通过使用哈希函数将键(Key)映射到一个位置,然后在该位置存储或查找数据。 哈希函数的作用是,将键转换为一个整数,这个整数通常称为哈希值(Hash Value)。哈希表的范围通

    2024年02月06日
    浏览(38)
  • 音频数据处理基本知识学习——降噪滤波基础知识

    滤波是一种信号处理方法,它可以通过消除或减弱信号中的某些频率分量,来实现信号的去噪、去除干扰、增强某些频率成分等目的。常见的滤波方法包括低通滤波、高通滤波、带通滤波等。 降噪是一种信号处理方法,它可以通过消除或减弱信号中的噪声成分,来提高信号的

    2024年02月15日
    浏览(52)
  • Selenium基础知识 多窗口处理

    有时需要在多个窗口之间来回切换从而测试一些功能。例如在手机注册页面、邮箱注册页面及其他社交帐号注册页面分别进行测试,可以同时打开多个窗口进行注册及登录。 Selenium针对跨浏览器的窗口处理应注意以下几点: · 在Selenium中每个窗口被当作一个会话句柄。 · We

    2024年02月16日
    浏览(45)
  • 什么是网关?网关基础知识介绍

    网关的英文名称:gateway,又叫做网间连接器、协议转换器。网关是在采用不同体系结构或协议的网络之间进行互通时,用于提供协议转换、路由选择、数据交换等网络兼容功能的设施。 网关在传输层上以实现网络互连,是最复杂的网络互连设备,仅用于两个高层协议不同的

    2024年02月08日
    浏览(47)
  • 5.8.webrtc事件处理基础知识

    在之前的课程中呢,我向你介绍了大量web rtc线程相关内容,今天呢,我们来看一下线程事件处理的基本知识。首先,我们要清楚啊,不同的平台处理事件的API是不一样的,这就如同我们当时创建线程是类似的,对吧?那对于Windows系统来说呢,它提供了wsa even的select以及完全端

    2024年02月11日
    浏览(37)
  • URL是什么意思?基础知识普及

    URL(Uniform Resource Locator)统一资源定位器,是计算机Web网络相关的术语,就是网页地址的意思。我们的互联网世界就是由很多的URL组成,也可以说就是已URL来表现的。统一资源定位系统(uniform resource locator;URL)是因特网的万维网服务程序上用于指定信息位置的表示方法。它最

    2024年02月04日
    浏览(49)
  • 什么是DNS?DNS基础知识介绍

    DNS是Domain Name System的简写,即域名系统,它作为可以将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。 上面的解释很多普通的用户可能无法理解,这里我们来简单的分析一下,让大家知道DNS是用来干什

    2024年02月08日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包