异常,exception,其实就是python的一个对象。每个异常都是某个异常类(如ZeroZeroDivisionError)的一个实例。
引发异常
异常可以是自动触发(违反某些规则,如除零),也可以是手动触发。使用raise语句,就可以引发指定的异常。
>>> raise Exception('This is an exception")
Traceback (most recent call last):
File "<stdin>", line 1, in ?
Exception: This is an exception
raise后面接Exception类(或其他异常类),括号里是异常信息。每次执行raise语句,都会自动创建一个异常类实例。
以下为几种python内置的异常类
![](https://img.haomeiwen.com/i5740488/63b42f68186d3bf1.png)
异常捕获和处理
可以使用try/except语句对异常进行捕获然后进行相关处理。else语句处理没有发生异常的情况。
>>>try:
print(x / y)
except ZeroDivisionError:
print("y can't be zero')
else
print("OK")
异常从函数向外传播到调用函数的地方。如果在这里也没有被捕获,异常将向程序的最顶层传播.
同时捕获多个异常可以用多个except语句,也可以用一个except,括号里写入若干种异常。如果想要捕获所有异常,直接用except语句,后面不接任何异常。
有时候,可使用条件语句来达成异常处理实现的目标,但这样编写出来的代码可能不那么自然,可读性也没那么高。另一方面,有些任务使用if/else完成时看似很自然,但实际上使用try/except来完成要好得多。因此,应该尽量养成写try/except的习惯。
自定义异常
除了第一节列出的几种python内置的异常类,也可以自定义异常类,用于专门处理某一类异常。
>>>class MyException(Exception):
pass
警告
如果只是想发出警告,指出出现了一些情况,不想中止程序,可以使用warning。
>>> from warnings import warn
>>> warn('Maybe you should stop here')
__main__:1: UserWarning: Maybe you should stop here
还可使用模块warnings中的函数filterwarnings来抑制你发出的警告(或特定类型的警告),并指定要采取的措施,如"error"或"ignore"。
网友评论