异常处理
-
什么叫做"异常”
-
异常的危害:
-
异常的分类:
-
异常有很多种类型,Python内置了几十种常见的异常,无需特别导入,直接就可使用。
-
需要注意的是,所有的异常都是异常类,首字母是大写的!
-
常见的异常类型:
异常名 解释 AttributeError 试图访问一个对象没有的属性 IOError 输入/输出异常 ImportError 无法引入模块或包;多是路径问题或名称错误 IndentationError 缩进错误 IndexError 下标索引错误 KeyError 试图访问不存在的键 KeyboardInterrupt Ctrl+C被按下,键盘终止输入 NameError 使用未定义的变量 SyntaxError 语法错误 TypeError 传入对象的类型与要求的不符合 UnboundLocalError 试图访问一个还未被设置的局部变量 ValueError 传入一个调用者不期望的值,即使值的类型是正确的 OSError 操作系统执行错误
-
-
python处理异常的机制:
-
Python内置了一套try…except…finally(else)…的异常处理机制,来帮助我们进行异常处理。其基本语法是:
try: pass except Exception: pass
-
机制说明:
-
首先,执行try子句(在关键字try和关键字except之间的语句)
-
如果没有异常发生,忽略except子句,try子句执行后结束。
-
如果在执行try子句的过程中发生了异常,那么try子句余下的部分将被忽略。如果异常的类型和 except 之后的名称相符,那么对应的except子句将被执行。
-
try: print('123') a = 1/0 except Exception as e: print(e) print('after except!')
-
try : num = eval(input("请输入一个整数: ")) print(num**2) except NameError: print("输入不是整数") # NameError 标注异常类型后,仅响应此异常 异常类型名字等同于变量
-
-
如果程序发生的异常不在你的捕获列表中,那么依然会抛出别的异常:
-
try: print('123') a = 1/0 except IndexError as e: print(e) print('after except!')
-
Exception是什么?
-
-
Python的异常机制具有嵌套处理的能力:
-
try…excetion的嵌套
-
之前我们说过,不是只使用通用的异常类Exception就万事大吉了,为了效率问题,我们需要对常见的异常信息进行精准的捕获,那么如果异常出现在用户层的话,则就需要对用户操作可能会出现的异常进行判断然后精准捕获了,如何操作呢?
-
如果一个异常没有与任何的except匹配,那么这个异常将会传递给上层的try中。也就是前面说的嵌套处理能力。直到程序最顶端如果还没有被捕获,那么将弹出异常。
try: try: a = 1/0 except IndexError as e: print(e) except ZeroDivisionError as e: print(e)
-
或者使用一个try和多个except的形式:
try: a = 1/0 except IndexError as e: print(e) except ZeroDivisionError as e: print(e)
-
或者在except后面跟一个元组,元组中包含多个异常类
-
try: a = 1/0 except (IndexError,ZeroDivisionError): print('error')
-
-
-
finally和else子句
-
主动抛出异常:raise
-
很多时候,我们需要主动抛出一个异常。Python内置了一个关键字
raise
,可以主动触发异常。 -
疑问:
-
-
自定义异常