【Python学习】python学习手册--第三十二章 异常基础

异常基础

异常会根据错误自动地被触发,也能由代码触发和捕获。Python有以下几种处理异常的语句:

  • try/except
    捕捉由Python或你引起的异常并恢复
  • try/finally
    无论异常是否发生,执行清理行为
  • raise
    手动在代码中触发异常
  • assert
    有条件地在程序代码中触发异常
  • with/as
    在Python2.6和后续版本中实现环境管理

异常时可以从大块代码中跳出来,并进入异常处理代码块。在发生异常时,会立即放弃发生异常之后的所有函数,并跳转至异常处理模块,运行代码。

异常的角色

在Python中,异常处理是一个高级的工具,它通常是以下几种角色:

  • 错误处理
    当Python运行时,检测到相关的异常状态时,可以在程序中捕捉和相应错误。如果没有有异常来处理,就是Python的默认处理行为:停止程序运行,并且打印异常信息。用try语句来检查相关异常,并对异常进行自定义处理。
  • 事件通知
    可以用错误来标示传递某种信息,比如在搜索失败时返回异常,直接进行异常处理,而不是返回一些返回值。
  • 特殊情况处理
    有一些特殊情况,很难从代码的逻辑上去处理,只能用异常处理来捕捉这些罕见情况。
  • 终止行为
    try/finally语句可以确保一些语句无论在异常或正常情况下都得到会执行。
  • 非常规控制流程
    异常处理语句可以用做非常规的控制流程语句,虽然反向追踪(backtracking)并不是语言本身的一部分,但是可以通过Python异常来实现。

Python中的异常

Python中如果没有编程实现异常捕捉处理的情况下,会进行默认的异常处理,就是立即终止程序的执行并且输出异常信息,输出的格式可能会根据Python的版本或交互平台而有所不同。

>>> lxm=[1,2,3,4,5]
>>> lxm[99]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range
>>> 

如果需要拦截并处理异常时,就需要把代码块放入try语句内,在try语句内的代码块会进行自动捕捉异常。当异常发生时,Python会自动跳到异常处理器(在except分句下面的语句)

>>> try:
...     lxm=[1,2,3,4,5]
...     lxm[99]
... except IndexError:
...     print("get IndexError")
... 
get IndexError
>>> 

在Python程序编程中,也可以通过手动编程通过raise语句抛出特定异常:

>>> try:
...     lxm=[1,2,3,4,5]
...     raise IndexError
... except IndexError:
...     print("get IndexError")
... 
get IndexError
>>> 

用assert语句也可以通过判断来触发异常信息,相当一个有条件的raise语句。

>>> lxm=1234
>>> assert lxm==1234,"error happened"
>>> assert lxm==12345,"error happened"  
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AssertionError: error happened
>>> 

用户定义的异常

异常在Python中是类,自定义异常的时候可以通过继承Exception类来定义自己的异常:

>>> class myselferror(Exception):
...       pass                   
... 
>>> lxm=myselferror()
>>> raise lxm
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
__main__.myselferror                   #这里抛出的是自己定义的异常myselferror
>>> 

终止行为

try语句可以用finally,在finally语句下的代码块,是在任何情况(发生异常也会执行)下都会执行的语句。
无论是否有异常发生,都会执行finally语句下的代码块:

>>> try:
...     lxm=123
...     assert lxm==1234,"Exception happened"
... except AssertionError:
...     print("AssertError Happened")
... finally:
...     print("the finally statement ")
... 
AssertError Happened
the finally statement 
>>> try:
...     lxm=1234
...     assert lxm==1234,"Exception happened"
... except AssertionError:
...     print("AssertError Happened")
... finally:
...     print("the finally statement ")
... 
the finally statement 
>>> 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值