枫枫知道个人博客
首页
新闻
心情
关于
文章搜索
网站导航
项目相关
官方文档
首页
新闻
心情
关于
文章搜索
网站导航
项目相关
官方文档
登录
注册
python基础--异常处理
什么是异常? 异常即是一个事件,该事件会在程序执行过程中发生
搜索
[[ slide_text ]]
[[ item.content ]]
8
0
python基础--异常处理
发布时间:
2022-02-09
作者:
枫枫
来源:
枫枫知道个人博客
python
### 什么是异常? 异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行。 一般情况下,在Python无法正常处理程序时就会发生一个异常。 异常是Python对象,表示一个错误。 当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行。 python提供了两个非常重要的功能来处理python程序在运行中出现的异常和错误。你可以使用该功能来调试python程序。 ### python标准异常 (红色的是最常见的python异常) |异常名称|描述| |-|-| |BaseException|所有异常的基类| |SystemExit|解释器请求退出| |KeyboardInterrupt|用户中断执行(通常是输入^C)| |Exception|常规错误的基类| |StopIteration|迭代器没有更多的值| |GeneratorExit|生成器(generator)发生异常来通知退出| |StandardError|所有的内建标准异常的基类| |ArithmeticError|所有数值计算错误的基类| |FloatingPointError|浮点计算错误| |OverflowError|数值运算超出最大限制| |ZeroDivisionError|除(或取模)零 (所有数据类型)| |AssertionError|断言语句失败| |AttributeError|对象没有这个属性| |EOFError|没有内建输入,到达EOF 标记| |EnvironmentError|操作系统错误的基类| |IOError|输入/输出操作失败| |OSError|操作系统错误| |WindowsError|系统调用失败| |ImportError|导入模块/对象失败| |LookupError|无效数据查询的基类| |IndexError|序列中没有此索引(index)| |KeyError|映射中没有这个键| |MemoryError|内存溢出错误(对于Python 解释器不是致命的)| |NameError|未声明/初始化对象 (没有属性)| |UnboundLocalError|访问未初始化的本地变量| |ReferenceError|弱引用(Weak reference)试图访问已经垃圾回收了的对象| |RuntimeError|一般的运行时错误| |NotImplementedError|尚未实现的方法| |SyntaxError|Python 语法错误| |IndentationError|缩进错误| |TabError|Tab 和空格混用| |SystemError|一般的解释器系统错误| |TypeError|对类型无效的操作| |ValueError|传入无效的参数| |UnicodeError|Unicode 相关的错误| |UnicodeDecodeError|Unicode 解码时的错误| |UnicodeEncodeError|Unicode 编码时错误| |UnicodeTranslateError|Unicode 转换时错误| |Warning|警告的基类| |DeprecationWarning|关于被弃用的特征的警告| |FutureWarning|关于构造将来语义会有改变的警告| |OverflowWarning|旧的关于自动提升为长整型(long)的警告| |PendingDeprecationWarning|关于特性将会被废弃的警告| |RuntimeWarning|可疑的运行时行为(runtime behavior)的警告| |SyntaxWarning|可疑的语法的警告| |UserWarning|用户代码生成的警告| ### 异常处理 捕捉异常可以使用`try/except`语句。 try/except语句用来检测try语句块中的错误,从而让except语句捕获异常信息并处理。 如果你不想在异常发生时结束你的程序,只需在try里捕获它。 语法: ```Python try: 可能出异常的语句,用于捕获异常 except 异常名称: 程序异常时所执行的语句,没有异常不执行该语句 ``` try的工作原理是,当开始一个try语句后,python就在当前程序的上下文中作标记,这样当异常出现时就可以回到这里,try子句先执行,接下来会发生什么依赖于执行时是否出现异常。 > 如果当try后的语句执行时发生异常,python就跳回到try并执行第一个匹配该异常的except子句,异常处理完毕,控制流就通过整个try语句(除非在处理异常时又引发新的异常)。 > 如果在try后的语句里发生了异常,却没有匹配的except子句,异常将被递交到上层的try,或者到程序的最上层(这样将结束程序,并打印默认的出错信息)。 > 如果在try子句执行时没有发生异常,python将执行else语句后的语句(如果有else的话),然后控制流通过整个try语句。 案例分析:捕获除法运算时被除数为0的异常 ```Python print(4/0) # ZeroDivisionError: division by zero ``` 我们可以看到被除数为0之后,程序直接就报了一个异常,那么我们就可以使用`try/except`语句进行捕获异常 ```Python try: print(4/0) except ZeroDivisionError: print('被除数不能为0!') # 被除数不能为0! ``` 异常可以通过 try 语句来检测,任何在try语句块里的代码都会被监测, 检查有无异常发生。try 语句有两种主要形式: `try-except`和`try-finally ` 这两个语句是互斥的, 即只能使用其中的一种。一个try语句可以对应一个或多个except子句,但只能对应一个finally子句,或是一个try-except-finally复合语句 可以使用`try-except`语句检测和处理异常,也可以添加一个可选的else子句处理没有探测到异常的时执行的代码,而try-finally只允许检测异常并做一些必要的清除工作(无论发生错误与否) ### 使用except而不带任何异常类型 你可以不带任何异常类型使用except,如下实例: ```Python try: 正常的操作 ...................... except: 发生异常,执行这块代码 ...................... else: 如果没有异常执行这块代码 ``` 以上这个程序就是先执行try中的语句,如果发现异常就执行except中的代码,如果try中语句执行完类都没有异常就再去执行else中的语句 以上方式try-except语句捕获所有发生的异常。但这不是一个很好的方式,我们不能通过该程序识别出具体的异常信息。因为它捕获所有的异常 ### 使用except而带多种异常类型 你也可以使用相同的except语句来处理多个异常信息,如下所示: ```Python try: 正常的操作 ...................... except(Exception1,Exception2,......,ExceptionN): 发生以上多个异常中的一个,执行这块代码 ...................... else: 如果没有异常执行这块代码 ``` ### try-finally 语句 try-finally 语句无论是否发生异常都将执行最后的代码 ```Python try: <语句> finally: <语句> #退出try时总会执行 ``` 当在try块中抛出一个异常,立即执行finally块代码。 finally块中的所有语句执行后,异常被再次触发,并执行except块代码。  ```Python try: find() except NameError as error: print(error) else: try: with open('file.log') as file: read_data = file.read() except FileNotFoundError as fnf_error: print(fnf_error) finally: print('这句话,无论异常是否发生都会执行。') ``` > name 'find' is not defined 这句话,无论异常是否发生都会执行。 ### 异常的参数 一个异常可以带上参数,可作为输出的异常信息参数。 你可以通过except语句来捕获异常的参数,如下所示: ```Python try: 正常的操作 ...................... except ExceptionType as Argument: 你可以在这输出 Argument 的值... ``` 异常参数就是python中出现异常之后所给出的提示信息,如下异常 ```Python ZeroDivisionError: division by zero ``` division by zero 就是异常的参数,我们可以使用`except ZeroDivisionError as error:`将它打印出来 ```Python try: print(4/0) except ZeroDivisionError as error: print(f'除数不能为0:{error}') # 除数不能为0:division by zero ``` ### 抛出异常 Python 使用 raise 语句抛出一个指定的异常。 raise语法格式如下: ```Python raise Exception (输出的参数) ``` 例如:如果 x 大于 5 就触发异常 ```Python x = 10 if x > 5: raise Exception('x 不能大于 5。x 的值为: {}'.format(x)) # Exception: x 不能大于 5。x 的值为: 10 ``` raise 唯一的一个参数指定了要被抛出的异常。它必须是一个异常的实例或者是异常的类(也就是 Exception 的子类),Exception是自己指定一个错误名称,而异常参数是()中的字符串内容 如果你只想知道这是否抛出了一个异常,并不想去处理它,那么一个简单的 raise 语句就可以再次把它抛出 ```Python try: raise NameError('HiThere') except NameError: print('An exception flew by!') raise ``` 如果没有raise语句,那么程序就只打印`An exception flew by!`,那么加上raise语句,程序就出现异常,异常信息就是`NameError: HiThere`
8
0
上一篇:【项目相关】0207--分页器
下一篇:优化后端代码
你觉得文章怎么样
发布评论
852 人参与,0 条评论