Python中的异常
原创
©著作权归作者所有:来自51CTO博客作者愤怒的可乐的原创作品,请联系作者获取转载授权,否则将追究法律责任
异常
类似Java中的Exception。Python用异常对象来表示异常情况。
如何抛出异常
Python中的raise语句。
>>> raise Exception
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
Python中Exception是所有异常的基类
自定义异常类
很简单,从Exception类中继承就可以了:
>>> class MyException(Exception):
... pass
...
>>> raise MyException
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
__main__.MyException
捕获异常
通过try/except语句来实现。
>>> try:
... x = 1
... y = 0
... print x/y
... except ZeroDivisionError:
... print "The sceond number cant be zero!"
...
如果捕捉到了异常,又想传递这个异常,可以这样:
>>> try:
... x = 1
... y = 0
... print x/y
... except ZeroDivisionError:
... raise
...
Traceback (most recent call last):
File "<stdin>", line 4, in <module>
ZeroDivisionError: integer division or
不止一个except语句
如果上面的例子中的y不是数字0,而是一个字符串。那么就会产生另外一个异常,为了捕获这个异常,需要加上另一个except子句
>>> try:
... x = 1
... y = 0
... print x/y
... except ZeroDivisionError:
... raise
... except TypeError:
... print "Thas wasnt a number"
如果需要在一个except子句中捕获多个类型异常,那么可以将它们作为元组列出。
捕获对象
下面介绍如何获得异常参数e:
>>> try:
... x = 1
... y = 0
... print x/y
... except (ZeroDivisionError,TypeError),e:
... print e
...
integer division or
Python3.0中,except子句被写作为except(ZeroDivisionError,TypeError) as e
全捕获
如果想用一段代码捕获所有异常,那么在except子句中忽略所有的异常类即可:
>>> try:
... x = 1
... y = 0
... print x/y
... except:
... print "Something bad happened..."
但是这种做法不推荐,因为无法获知引发异常的原因,用except Exception, e
会更好些
还可以给try/except语句加个else子句:
>>> try:
... x = 1
... y = 0
... print x/y
... except (ZeroDivisionError,TypeError),e:
... print e
... else:
... print 'It went as planned.'
没有异常发生时会执行else中的语句。
finally子句
try:
x = 1/0
finally:
print 'Cleaning up...'
del x
finally子句肯定会执行,不管有没有异常。