Python的学习之旅---开始篇(六)

来源:互联网 发布:金属杆中性笔知乎 编辑:程序博客网 时间:2024/06/06 04:49

什么是异常

         Python 用异常对象来表示异常情况。遇到错误后,会引发异常。如果异常对象并未被处理或者捕捉,程序就会用所谓的回溯(traceback,一种错误信息)终止执行。

事实上,每个异常都是一些类的实例,这些实例可以被引发,并且可以用很多种方法进行捕捉,使得程序可以捉住错误并且对其进行处理,而不是让整个程序失效。

>>> raise ExceptionTraceback (most recent call last):  File "<pyshell#75>", line 1, in <module>    raise ExceptionException>>> raise Exception('hyperdrive overload')Traceback (most recent call last):  File "<pyshell#76>", line 1, in <module>    raise Exception('hyperdrive overload')Exception: hyperdrive overload>>> 

常见的一些重要的内建异常类:

NameError     在找不到名字(变量)时引发

SyntaxError     在代码为错误形式时引发

TypeError        在内建操作或者函数应用于错误类型的对象时引发

ValueError      在内建操作或者函数应用于正确类型的对象,但是该对象使用不合适的值时引发

ZeroDivisionError     在除法或者模除操作的第二个参数为0时引发

        如何创建自己的异常类呢?就像其他类一样,只是要确保从Exception 类继承(不算是间接的或者是直接的,也就是说继承其他的内建异常类也是可以的)。那么编写一个自定义异常基本上就像下面这样:

        class SomeCustomException(Exception): Pass

如果捕捉到了异常,但是又想重新引发它(也就是说要传递异常,不进行处理),那么可以调用不带参数的raise(还能在捕捉到异常时显式地提供具体异常。) 

        用一个块捕捉两个或者以上的异常(捕捉对象):如果要捕捉多个异常,也只需要向except 子句提供一个参数-----一个元组。

try:    x = input('Enter the first number: ')    y = input('Enter the second number: ')    print x/yexcept (ZeroDivisionError, TypeError),e:    print e
为了捕捉所有Exception类的异常(也会捕捉其所有子类的异常)。

while true:    try:        x = input('Enter the first number: ')        y = input('Enter the second number: ')        print x/y    except Exception,e:        print e        print 'Please try again'    else:        break

因为使用del语句删除一个变量是非常不负责的清理手段,所以finally子句用于关闭文件或者网络套接字时会非常有用。还可以在同一条语句中组合使用try、except、finally和else(或者其中的三个)

try:     1/0except NameError:      print "Unknow variable"else:      print "That went well!"finally:     print "Cleaning up"
异常处理并不是很复杂。如果知道某段代码可能会导致某种异常,而又不希望程序以堆栈跟踪的形式终止,那么就根据需要添加try/except或者try/finally语句(或者他们的组合)进行处理。                                                                            

以上笔记大致来自《Python基础教程 第二版》







0 0
原创粉丝点击