引发异常(1)
在交互式解释器中,输入10/2,将会得到结果5。但是输入10/0,将会报错。这个时候交互式解释器自动引发异常,而且会下分到某个类。
常见的异常
Exception | 一种很通用的异常类,派生了很多其他的异常 |
---|---|
AttributeError | 属性或者赋值出现问题时引发的异常 |
OSError | 操作系统无法执行分配的任务 |
IndexError | Index是用来获得索引,所以此类错误是使用不存在的索引引发 |
KeyError | Key代表键,使用了不存在的键将引发此类错误 |
NameError | 通过名称很容易知道,找不到名称引发的错误 |
SyntaxError | 这个就是代码不对,就会出现这类错误 |
TypeError | 比如10/name,我们很容易看到,输入类型错误,这会引发类型错误 |
ZeroDivisionError | 除法或者求模时,分母为0,如最开始的例子,引发此类错误 |
ValueError | 类型正确,值不合适,如上面的例子,分母可以是2,不能是0 |
捕获异常时,可以自定义处理的操作,借助try/except
try:
x=int(input("Enter the first number:"))
y=int(input("Enter the second number:"))
print(x/y)
except ZeroDivisionError:
print("The second number can not be 0")
这就会在引发零除错误时输出自定义的字符串“The second number can not be 0”
可以通过多个except语句处理多种异常,也可以通过一个except语句,使用元组捕获多种异常,如:
except(ZeroDivisionError,TypeError,NameError): print("you are wrong !")
参数不一定是一个,元组中包含多个参数,但是元组是一个整体,所以也代表一个参数。
比如前面程序进行修改:
except(TyprError,NameError) as e:
print(e)
捕获两种异常,而且可以显式地捕获对象本身,能够让用户知道发生了什么情况。