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 OSError
raise OSError('自定义异常')
-------------------------------
>>>OSError: 自定义异常