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

什么是异常

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

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

>>> raise Exception
Traceback (most recent call last):
  File "<pyshell#75>", line 1, in <module>
    raise Exception
Exception
>>> 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/y
except (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/0
except NameError:
      print "Unknow variable"
else:
      print "That went well!"
finally:
     print "Cleaning up"
异常处理并不是很复杂。如果知道某段代码可能会导致某种异常,而又不希望程序以堆栈跟踪的形式终止,那么就根据需要添加try/except或者try/finally语句(或者他们的组合)进行处理。                                                                            

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







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值