Pyton学习总结(7)-异常

处理异常

  • 异常有不同的类型,其类型会作为消息的一部分打印出来,内置的异常 列出了内置的异常以及它们的含义。
while True:
    try:
        x = int(raw_input("Please enter a number: "))
        break
    except ValueError:
        print "Oops!  That was no valid number.  Try again..."
    except (RuntimeError, TypeError, NameError):
        pass
    except IOError as e:
        print "I/O error({0}): {1}".format(e.errno, e.strerror)
    else : 
        pass
  • try语句可能有多个异常子句,用来指定多个不同的异常。不过至多只有一个处理程序将被执行。
  • 如果异常的类型与 except 关键字后面的异常名不匹配,它将被传递给上层的try语句。
  • 一个 except 子句可以用带括号的元组列出多个异常的名字。括号是必须的。
  • else子句必须放在except后面,当try没有抛出异常时将执行该语句,当try执行returnelse子句将不会被执行。
  • 使用else子句比把额外的代码放在try子句中要好,因为它可以避免意外捕获不是由try ... except语句保护的代码所引发的异常。
  • except子句可以在异常名(或元组)之后指定一个变量。这个变量将绑定于一个异常实例,同时异常的参数将存放在实例的args中。
try:
   raise Exception('spam', 'eggs')
except Exception as inst:
   print type(inst)     # the exception instance
   print inst.args      # output : spam eggs
   print inst           # __str__ allows args to be printed directly

引发异常

raise语句允许程序员强行引发一个指定的异常。

try:
    raise NameError('HiThere')
except NameError:
    print 'An exception flew by!'
    raise

自定义异常

class MyError(Exception):
    def __init__(self, value):
        self.value = value
    def __str__(self):
        return repr(self.value)

try:
    raise MyError(2*2)
except MyError as e:
    print 'My exception occurred, value:', e.value
  • 用户可以通过创建新的异常类来命名自己的异常。异常通常应该继承Exception类,直接继承或者间接继承都可以。
  • 创建一个能够引发几种不同错误的模块时,一个通常的做法是为该模块定义的异常创建一个基类,然后基于这个基类为不同的错误情况创建特定的子类。

finally

  • try语句有另一个可选的子句,目的在于定义必须在所有情况下执行的清理操作。
  • 不管有没有发生异常,在离开try语句之前总是会执行finally子句。
  • 另外,假如tryelseexceptfinally语句都包含return时,函数的返回值为最后执行的return语句,也就是finally中的return语句,因为它总是最后执行。
try:
    raise KeyboardInterrupt
finally:
    print 'Goodbye, world!'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值