Python 异常

Python  异常

异常简介

raise语句

内置的异常类

自定义异常类

except捕获异常

finally函数处理

异常之禅

异常简介

Python在处理正常和异常,提供了功能强大的替代解决方案--异常处理方式

异常对象未被处理或者捕获时,程序报错终止并显示错误信息

如果只用于显示错误信息,显然毫无意义,所以要捕获该异常并处理

raise语句

引发异常可以采用raise语句去实现,并将一个类(必须是Exception的子类)或者实例化作为参数,如果直接将类作为参数,将自动创建一个实例。

例子:>>>

 raise Exception('This is common Error')

Traceback (most recent call last):
  File "<pyshell#6>", line 1, in <module>
    raise Exception('This is common Error')

Exception: This is common Error

内置的异常类

Python异常内置类
类   名描   述
Exception
几乎所有的异常类都是从它派生出来的
AttributeError
引用属性或给它赋值失败时引起
OSError
操作系统不能执行指定的任务(如打开文件)时引发,有多个子类
IndexError
使用序列中不存在的索引时引发,为LookupError的子类
KeyError
使用映射中不存在的键值时引发,为LookupError的子类
NameError
找不到名称(变量)时引发
SyntaxError
代码不正确的时候引发
TypeError
将内置操作或者函数用于类型不正确的对象时引发
ValueError
将内置操作或者函数用于这样的对象时引发:其类型正确但是包含的值不合适
ZeroDivisionError在除法或者求模运算的第二个参数为零时引发

自定义异常类

自定义异常类最好直接或者间接的继承Exception类

如:class SomeCustomException(Exception):pass

except捕获异常

x = None
try:
    x = 1/0
except ZeroDivisionError:
    print('Unknow variable')
else:
    print('that went well')

首先运行try里面的code block段,出现异常的话便会运行except,这部分代码用于判断是否是内置类里面的0作为除数的Error。如果不出现异常则运行else语句,同时需要注意的是如果except接收的错误类型不对,导致未接收到错误则同样由编译器报错。

如果except不添加错误判断参数,则一旦获取到错误信息则直接进入该函数内。

同时可以添加多个except语句,类似if语句,满足错误条件则进入,否则编译器报错。

或者采用except(ZeroDivisionError,TypeError,NameError):的方法用元组实现判断。

while True:
    try:
        X = int(input('Enter Your First Value:'))
        Y = int(input('Enter Your Second Value:'))
        value = X/Y
        print(value)
    except Exception as e:
        print('Error,Please try again')
        print('Invalid input',e)
    else:

        break

不断接受直到接受到正确的输入,并且报错,显示错误信息,由e这个变量决定。

finally函数处理

try:
     1/0
except ZeroDivisionError:
    print('Unknow variable')
else:
    print('that went well')
finally:
    print('cleaning up...')
    del x
不论try内的code block是否出现异常,都会执行finally内的语句。所以固定会打印cleaning up…语句

异常之禅

if/else 和try/except的使用比较,在Python内最好使用try/except合适,原因在于try子句只是具备访问属性write,而没用使用它做任何事情。如果引发了AttributeError,说明对象没有属性write,否则就说明有这个属性。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值