Python标准异常总结
| AssertionError | 断言语句(assert)失败 |
|---|---|
| AttributeError | 尝试访问未知的对象属性 |
| EOFError | 用户输入文件末尾标志EOF(Ctrl+d) |
| FloatingPointError | 浮点计算错误 |
| GeneratorExit | generator.close()方法被调用的时候 |
| ImportError | 导入模块失败的时候 |
| IndexError | 索引超出序列的范围 |
| KeyError | 字典中查找一个不存在的关键字 |
| KeyboardInterrupt | 用户输入中断键(Ctrl+c) |
| MemoryError | 内存溢出(可通过删除对象释放内存) |
| NameError | 尝试访问一个不存在的变量 |
| NotImplementedError | 尚未实现的方法 |
| OSError | 操作系统产生的异常(例如打开一个不存在的文件) |
| OverflowError | 数值运算超出最大限制 |
| ReferenceError | 弱引用(weak reference)试图访问一个已经被垃圾回收机制回收了的对象 |
| RuntimeError | 一般的运行时错误 |
| StopIteration | 迭代器没有更多的值 |
| SyntaxError | Python的语法错误 |
| IndentationError | 缩进错误 |
| TabError | Tab和空格混合使用 |
| SystemError | Python编译器系统错误 |
| SystemExit | Python编译器进程被关闭 |
| TypeError | 不同类型间的无效操作 |
| UnboundLocalError | 访问一个未初始化的本地变量(NameError的子类) |
| UnicodeError | Unicode相关的错误(ValueError的子类) |
| UnicodeEncodeError | Unicode编码时的错误(UnicodeError的子类) |
| UnicodeDecodeError | Unicode解码时的错误(UnicodeError的子类) |
| UnicodeTranslateError | Unicode转换时的错误(UnicodeError的子类) |
| ValueError | 传入无效的参数 |
| ZeroDivisionError | 除数为零 |
内置异常类的层次结构
BaseException
+— SystemExit
+— KeyboardInterrupt
+— GeneratorExit
+— Exception
+— StopIteration
+— ArithmeticError
| +— FloatingPointError
| +— OverflowError
| +— ZeroDivisionError
+— AssertionError
+— AttributeError
+— BufferError
+— EOFError
+— ImportError
+— LookupError
| +— IndexError
| +— KeyError
+— MemoryError
+— NameError
| +— UnboundLocalError
+— OSError
| +— BlockingIOError
| +— ChildProcessError
| +— ConnectionError
| | +— BrokenPipeError
| | +— ConnectionAbortedError
| | +— ConnectionRefusedError
| | +— ConnectionResetError
| +— FileExistsError
| +— FileNotFoundError
| +— InterruptedError
| +— IsADirectoryError
| +— NotADirectoryError
| +— PermissionError
| +— ProcessLookupError
| +— TimeoutError
+— ReferenceError
+— RuntimeError
| +— NotImplementedError
+— SyntaxError
| +— IndentationError
| +— TabError
+— SystemError
+— TypeError
+— ValueError
| +— UnicodeError
| +— UnicodeDecodeError
| +— UnicodeEncodeError
| +— UnicodeTranslateError
+— Warning
+— DeprecationWarning
+— PendingDeprecationWarning
+— RuntimeWarning
+— SyntaxWarning
+— UserWarning
+— FutureWarning
+— ImportWarning
+— UnicodeWarning
+— BytesWarning
+— ResourceWarning
处理异常 try except
try:# 执行代码f= open('我是文件.txt')print(f.read())except OSError:print('文件出错拉T_T')
以下是书写可选参数 示列
try:# 执行代码f= open('我是文件.txt')print(f.read())except OSError as err:print('文件出错拉T_T\n报错原因:' + err)
错误分类
try:# 执行代码sum = 1 + '1'f= open('我是文件.txt')print(f.read())except OSError as err:print('文件出错拉T_T\n报错原因:' + err)except TypeError as err:print('类型出错拉T_T\n报错原因:' + err)
同时处理 多种类型错误
try:# 执行代码sum = 1 + '1'f= open('我是文件.txt')print(f.read())except (OSError, TypeError):print('出错拉T_T\n报错原因:' + err)
finally 无论如何都会执行
try:# 执行代码f= open('我是文件.txt', 'w')print(f.write('我存在了!'))sum = 1 + '1'f.close()except (OSError, TypeError):print('出错拉T_T\n报错原因:' + err)finally:# 无论如何都会执行的代码
上面的代码 第五行会报错后, 就不执行后面 关闭文件的代码, 这样就会导致写入的内容 会不成功, 在缓存中
try:# 执行代码f= open('我是文件.txt', 'w')print(f.write('我存在了!'))sum = 1 + '1'except (OSError, TypeError):print('出错拉T_T\n报错原因:' + err)finally:# 无论如何都会执行的代码f.close()
这样 书写, 尽管 第五行报错了, 文件没有关闭, 使用了finally 就可以解决这个问题, 无论是否 正确都会执行这里的代码
raise 引发异常
可以人工 引发指定的异常名字
raise OSErrorraise OSError('自定义异常')------------------------------->>>OSError: 自定义异常
