python 常用异常类型:
AssertionError:断言语句(assert)失败
AttributeError:尝试访问未知的对象属性
EOFError:用户输入文件末尾标志EOF(Ctrl+d)
FloatingPointError:浮点计算错误
GeneratorExit:generator.close()方法被调用的时候
ImportError:导入模块失败的时候
IndentationError:代码书写的缩进错误
IndexError:索引超出序列的范围
IOError:输入输出错误
LookupError:键、值不存在引发的异常
KeyError:字典中查找一个不存在的关键字
KeyboardInterrupt:用户输入中断键(Ctrl+c)
MemoryError:内存溢出,内存耗尽异常(可通过删除对象释放内存)
NameError:尝试访问一个不存在的变量
NotImplementedError:尚未实现的方法
OSError:操作系统产生的异常(例如打开一个不存在的文件)
OverflowError:数值运算超出最大限制
ReferenceError:弱引用(weak reference)试图访问一个已经被垃圾回收机制回收了的对象
RuntimeError:一般的运行时错误
StopIteration:迭代器没有更多的值
SyntaxError:Python的语法错误
TabError:Tab和空格混合使用
TypeError:类型错误
SystemError:Python编译器系统错误
SystemExit:Python编译器进程被关闭
TypeError:不同类型间的无效操作
UnboundLocalError:访问一个未初始化的本地变量(NameError的子类)
UnicodeError:Unicode相关的错误(ValueError的子类)
UnicodeEncodeError:Unicode编码时的错误(UnicodeError的子类)
UnicodeDecodeError:Unicode解码时的错误(UnicodeError的子类)
UnicodeTranslateError:Unicode转换时的错误(UnicodeError的子类)
ValueError:传给函数无效的参数
ZeroDivisionError:除数为零
StandardError 标准异常除StopIteration, GeneratorExit, KeyboardInterrupt 和SystemExit外,其他异常都是StandarError的子类。
异常处理:
try: try_suite except [Exception [as e]]: #e只是一个变量名称,可以随便写 do_except else: do_else finally: do_finally
执行顺序:
1、若try语句没有捕获异常,执行完try_suite代码后,执行else代码段,最后执行finally。
2、若try捕获异常,首先执行except处理错误,然后执行finally。
注意点:
1、except语句中Exception代表错误类型名称,直接写Exception代表不指定具体的错误类型,这样可以捕获到全部的错误类型,也可以指定错误类型,这样仅捕获指定的错误类型,可以使用多个except语句来捕获不同类型的错误,except后面的Exception as e语句都可以省略,可以捕获所有的异常。
2、except后面可以跟一个元祖,元祖里面是错误类型名称,这样可以捕获元祖里面所有的错误类型,如except (OSError,TypeError),这样使用后面就不能跟as e语句了。
3、else语句只有在try语句没有捕获到错误时才会执行,一般用于调试程序使用,可以省略。
4、finally语句不管try是否捕获错误,都会在最后执行,如果没有except语句,会先执行finally语句,然后在把错误抛给解释器处理,一般用于为异常处理事件提供清理机制,用来关闭打开的资源或释放系统资源,可以省略。
抛出异常:
raise Exception('错误提示信息')语句允许强制抛出一个指定的异常。
Exception必需是一个异常实例或异常类(继承自 Exception 的类)
如果需要抛出一个异常,但不想处理它,raise语句可以重新抛出该异常:
try:
raise NameError('HiThere')
except NameError:
print('An exception flew by!')
raise
自定义异常:
在程序中可以通过创建新的异常类型来命名自定义的异常。异常类通常应该直接或间接的从Exception类派生,例如:
class MyError(Exception):
def __init__(self, value):
self.value = value
def __str__(self):
return repr(self.value)
try:
raise MyError(2*2)
except MyError as e:
print('My exception occurred, value:', e.value)
断言语句:
assert语句用于检测表达式是否为真,如果为假,程序自动崩溃(自杀)并抛出AssertionError错误,我们可以用它在程序中置入一个检查点,当需要确保程序中某个条件一定为真程序才能正常工作时,我们可以使用assert断言语句。
assert expression [,args]
expression为用于检测的表达式
args为这个AssertionError错误的描述信息
附python内置异常类层次结构:
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
- 本文固定链接: https://www.qingheluo.com/pythondeyichangleixingheyichangchuli/
- 转载请注明: qingheluo 于 清河洛 发表