Python学习(十一)--异常
一、定义
Python用异常对象来表示异常情况。遇到错误后,会引发异常,如果异常对象并没有被处理或者捕捉,程序就会用所谓的回溯(traceback)终止执行。
每个异常都是一些类的实例,这些实例可以被引发,并且可以用很多方法进行捕捉。
二、raise语句引发异常
>>> raise Exception Traceback (most recent call last): File "<stdin>", line 1, in <module> Exception >>> raise Exception('error error') Traceback (most recent call last): File "<stdin>", line 1, in <module> Exception: error error
Exception是所有异常类的基类。其它一些常见异常类可以查看手册。上面两个例子都通过raise语句引发了异常。第二个例子里加上了错误信息。
三、捕捉异常
通过try/except语句可以实现捕捉异常的功能。针对具体的异常,可以在except后面加上异常类,如下:
try: x = input('Enter the first number: ') y = input('Enter the second number: ') print x/y except ZeroDiyisionError: print "the second number can't be zero! "
如果except后面什么异常类也不加,那么就会捕捉所有异常。
如果捕捉到了异常又想重新引发它,可以调用不带参数的raise。
try: x = input('Enter the first number: ') y = input('Enter the second number: ') print x/y except ZeroDiyisionError: raise
四、捕捉多个异常
第一种方法可以使用多个except子句,针对每种情况说明。
try: x = input('Enter the first number: ') y = input('Enter the second number: ') print x/y except ZeroDiyisionError: print "the second number can't be zero! " except TypeError: print "That was't a number!
当然也可以将异常类型作为元组列出。
try: x = input('Enter the first number: ') y = input('Enter the second number: ') print x/y except (TypeError, NameError): print "Your numbers were bogus..."
五、访问异常对象本身
try: x = input('Enter the first number: ') y = input('Enter the second number: ') print x/y except (TypeError, NameError),e: print e
通过如上方式就可以将错误打印出来。
六、使用else 、finally语句
在捕捉异常的时候,也可以联合使用else、finally语句来执行一些操作。
x = None try: x = 1/0 except NameError: print "Unknown variable" else: #无异常时会执行else语句 print "That went well!" finally: #不管是否有异常,都会执行finally语句 print "Cleaning up"