异常
什么是异常
Python 用异常对象(exception object)来表示异常情况。遇到错误后,会引发异常。如果异常对象并未被处理或者捕捉,程序就会用所谓的回溯(Traceback,一种错误信息)终止执行。
>>> 1/0
Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
1/0
ZeroDivisionError: division by zero
事实上每个异常都是一些类的实例,这些实例可以被引发,并且可以用很多种方法进行捕捉,是的程序可以捉住错误并且进行处理,而不是让整个程序失败。
按自己的方式出错
异常可以在某些东西出错时自动引发,甚至创建自己的异常类型。
raise语句
为了引发异常,可以使用一个类(Exceptiond的子类)或者实例参数调用raise语句。
>>> raise IOError
Traceback (most recent call last):
File "<pyshell#1>", line 1, in <module>
raise IOError
OSError
>>> raise IOError("error")
Traceback (most recent call last):
File "<pyshell#2>", line 1, in <module>
raise IOError("error")
OSError: error
自定义异常类
尽管內建的异常类已经包括了大部分的情况,而且对于很多要求都已经满足了。但是!!!在有些时候还是要创建自己的异常类。方法是使用继承来实现。但是是必须从Exception类继承(也可以是其子类)。
class NewException(Exception):
pass
捕捉异常
捕捉异常使用try/except来实现。
try:
x=10
y=0
print (x / y)
except ZeroDivisionError:
print("y can't be zero!")
# result:
# y can't be zero!
多条except子句
try:
x=input("Enter the first number: ")
y=input("Enter the second number: ")
print(x/y)
except ZeroDivisionError:
print("The second number can't be zero!")
except TypeError:
print("That wasn't a number,was it?")
#result:
#That wasn't a number,was it?
用一个块捕捉两个异常
将其作为元祖列出
try:
x=input("Enter the first number: ")
y=input("Enter the second number: ")
print(x/y)
ex自cept (ZeroDivisionError,TypeError,NameError):
print("Your name were bogus...")
捕捉对象
try:
x=10
y=0
print(x/y)
except(ZeroDivisionError,TypeError,NameError) as e:
print(e)
这种写法可以将异常打印出来
else
try :
print ("A is simple task")
except :
print('What?')
else:
print("It went as planed.")
自行领悟其中精髓
最后。。。
不管try子句中是否发生异常,finally子句一定会执行。
try:
x = 2/4
except NameError:
print("Unknow variable")
else :
print("That went well")
finally:
print("Cleaning up")