Python检测和处理异常

检测和处理异常

异常可以通过Try 语句来检测。任何在try语句里的代码都会被监测,检查有无异常发生。

try语句有两种形式:try-excepttry-finally

这两个语句是互斥的,也就是说你只能使用其中的一个。

一个try语句可以对应一个或多个except 子句,但只能对应一个finally子句,或是一个try-except-finally符合语句。

你可以使用try-except语句检测和处理异常。你也可以添加一个可选的else 子句处理没有检测到异常的执行的代码。

try-finally只允许检测异常并做一些必要的清除工作(无论发生错误与否),没有任何异常处理措施。


try-except语句

try-except语句定义了进行异常监控的一段代码,并且提供了处理异常的机制。

try:

  try_suit   #监控这里的异常

except exception【,reason】:

except_suit  #异常处理代码


>>> f=open("blan")
Traceback (most recent call last):
  File "", line 1, in
    f=open("blan")
FileNotFoundError: [Errno 2] No such file or directory: 'blan'


我们用一个例子说明这是如何工作的。我们将使用上面的IOError例子,把我们的代码封装在try-except里,让代码更健壮。

>>> try:
    f = open('blan','r')
except(IOError):
    print("could not open file:")

    
could not open file:

如上所述,我们的代码运行时似乎没有遇到任何错误。

事实上我们的代码在尝试打开一个不存在的文件时仍然发生了IOError。


那么上述两段代码有什么区别呢?第二断程序我们加入了错误检测和处理的代码。当引发IOError异常时,我们告诉解释器让他打印出一条异常信息。此时程序继续执行下去。


在程序运行时,解释器尝试执行try块里的所有代码,如果代码块完成后没有任何异常发生,执行流就会忽略except语句继续执行。

而当except语句所指定的异常发生后,我们保存了错误的原因,控制流立即跳转到对应的处理器(try语句剩余的语句将被忽略)。


try语句块中异常发生的点后的剩余语句将永远不会到达(所以也永远不会执行)。

一旦一个异常被引发,就必须决定控制流下一步到达的位置。剩余代码将被忽略。解释器将搜索处理器,一旦找到,就开始执行处理器中的代码。


如果没有找到合适的处理器,那么异常就将向上移交给调用者去处理,着意味着堆栈框架回到之前的哪一个。

如果在上层调用者也没有找到对应的处理器,该异常将会继续向上移交,知道找到合适的处理器。

如果到达最顶层仍然没有找到合适的处理器,Python显示器会显示出跟踪记录,然后退出。




你可能感兴趣的:(Python,学习)