4 Python中的异常

异常

转载请注明出处:(http://blog.csdn.net/lis_12/article/details/52759848)

  • 所有异常都是基类Exception的成员。所有异常都从基类Exception继承,而且都在exceptions模块中定义。Python自动将所有异常名称放在内建命名空间中,所以程序不必导入exceptions模块即可使用异常。一旦引发而且没有捕捉SystemExit异常,程序执行就会终止。如果交互式会话遇到一个未被捕捉的SystemExit异常,会话就会终止。

  • 使用raise可引发异常,

    格式:raise Exception([value]),异常类型,指定异常细节的可选参数;

  • 使用try和except可以捕捉异常,正常执行的语句放在try块中,错误处理语句放在except块中

    格式:

    try:
      fp = open(filename,'r')
      print 'try'
    except IOError,NameError as e:#except后面可以写多个异常,e存储的是异常信息
                                #如果except后面什么都不写就是捕捉所有异常,尽量避免捕捉所有异常,不然出错了不好找啊
      print e  
      print '%s do not exist'%filename 
    else:#try中无异常才会执行else语句
      print 'else'
      for i in fp:
          print i
      fp.close()
    finally:#无论如何都会执行,如果进入了try即使进入了return,也会执行finally处
      print 'finally'
    
    assert 1==2  #如果该表达式为假 触发异常

常见异常类型

官网所有异常链接

异常名称解释
AttributeError属性错误,特性引用和赋值失败时会引发属性错误
NameError试图访问的变量名不存在
SyntaxError语法错误,代码形式错误
Exception与退出程序相关异常之外的所有异常,尽量不要用这种异常,不然bug很不好找
IOError一般常见于打开不存在文件时会引发IOError错误,也可以解理为输出输入错误
KeyError使用了映射中不存在的关键字(键)时引发的关键字错误
IndexError索引错误,使用的索引不存在,常索引超出序列范围
TypeError类型错误,内建操作或是函数应于在了错误类型的对象时会引发类型错误
ZeroDivisonError除数为0,在用除法操作时,第二个参数为0时引发了该错误
ValueError值错误,传给对象的参数类型不正确,像是给int()函数传入了字符串数据类型的参数
StopIteration引发后可停止迭代
ImportErrorimport异常

定义新异常

所有内置异常都是使用类定义,创建一个新异常,就定义父类为Exception的新类.

  1. 定义
  2. 可通过raise触发异常,引发异常时,将利用raise传递异常的参数;
#定义新的异常
class NewException1(Exception):
    def __init__(self,*arg):
        self.args = arg

class NewException2(Exception):
    def __init__(self,*arg):
        self.a = arg
try:
    raise NewException1(1,2,3,4)
except Exception as e:
    print e   #(1,2,3,4)
try:
    raise NewException2(1,2,3,4)
except Exception as e:
    print e#空
'''如果不定义self.args这个属性,打印异常信息时,看不到任何信息'''
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值