您的位置:首页 > 编程语言 > Python开发

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

2018-04-02 16:07 399 查看

异常基础

异常会根据错误自动地被触发,也能由代码触发和捕获。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
>>>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: