异常处理的能力是一门语言好坏的重要特征。python也提供了强大的异常处理功能,如下面介绍。
1. try...except :
try:
#raise NameError
pass
except NameError:
# code to be executed when NameError occurred
pass
except ValueError:
# code to be executed when NameError occurred
pass
上述代码的执行规则如下:
首先,执行try语句中的语句。
如果在执行的过程中出现异常,则立即停止try语句的执行,执行异常处理或者停止执行(异常没有处理)
发生异常后,将异常类型按顺序与except语句中的异常匹配,如果匹配成功,执行对应的异常处理。如果匹配不成功。将异常传递给更高一级的try语句,如果异常一直未找到处理程序则停止执行,抛出异常信息。
执行流程图如下:
有几点需要注意:
- 出现异常时一旦类型匹配成功,就执行该类型对应的异常处理。此后不再继续匹配,也就是说最多(不匹配时不执行)只有一个异常处理代码块被执行。
- 一个except语句可以处理多种类型(组成元组)的异常,格式如下: except (RuntimError, TypeError, NameError):
- except中可以引用异常的实例, except NameError as inst : 或者 except NameError, inst .如果出现NameError异常,err就是这个异常的实例。可以操作这个实例的方法或者属性获得更多的异常信息。
例如:
try:
raise Exception('spam', 'eggs')
except Exception as inst :
print(type(inst)) #<class 'Exception'>
print(inst.args) #(argument tuple)
print(inst) #
这段代码中,抛出异常时我们传递了两个参数 spam和eggs,这两个参数被组成一个元组,存储在异常实例的args属性中,因此print inst.args将输出(‘spam’, 'eggs').由于这个异常实例定义了__str__方法,所以可以直接将它输出,输出结果与print inst.args一样。如果一个传递了参数的异常没有被处理,那么在抛出的异常信息最后一部分会是所传递的参数。假设上面抛出的异常没有处理(即去掉except语句),则输出的异常信息最后一部分是:Exception:
('spam', 'eggs')
2. try ... except ... else:
else语句是可选的,它在没有出现异常的时候被执行。也就是说,try语句没有异常时,执行else语句。try语句出现异常时,按照1中的规则执行,忽略else语句。
3. try...finally
try:
#You do your operations here;
pass
#Due to any exception, this may be skipped.
finally:
pass
#This would always be executed.
在这种情形中,finally语句总会被执行,无论try是否出现异常。
下面是一个很好的例子:
try:
fh = open("testfile", "w")
try:
fh.write("This is my test file for exception handling!!")
finally:
fh.close()
except IOError:
print("Error: can\'t find file or read data")
else :
print("Everything goes well")
上述代码中,在执行内部try语句时,写完文件之后,finally一定会被执行,也就是文件一定会关闭。这段代码中有两处可能出现异常,open和write。如果在open出现异常,内部try不被执行,直接进行异常处理输出“Error: can\'t find file or read data”。如果open不出现异常,继续执行内部try,无论内部try是否出现异常close总会被执行。内部try出现异常,由于内部try没有except语句,所以异常被传递给外部try语句,匹配IOError成功,执行异常处理,输出“Error:
can\'t find file or read data”。不出现异常的时候,执行else语句。
另一个例子:
def divide(x, y):
try:
result = x / y
except ZeroDivisionError:
print("division by zero!")
else:
print("result is", result)
finally:
print("executing finally clause")
执行divide(2, '2')时,结果如下:
executing finally clause
Traceback (most recent call last):
File "D:\eclipse\workspace\python\exception\try_exception.py", line 11, in <module>
divide(2,'2')
File "D:\eclipse\workspace\python\exception\try_exception.py", line 3, in divide
result = x / y
TypeError: unsupported operand type(s) for /: 'int' and 'str'
4. raise 抛出异常
除了程序运行时出现异常外,我们也可以人为地抛出任意类型的异常。e.g:
raise NameError("TEST")
raise后面只能跟着一个异常。这个异常可是是异常类,也可是是异常实例。
如果你只想知道是否出现异常,不想去处理异常,有一种方法可以重新抛出异常:
try:
raise NameError("Hello")
except NameError:
print "a NameEerror occurs"
raise
这段代码执行结果如下:
a NameEerror occurs
Traceback (most recent call last):
File "<pyshell#1>", line 2, in <module>
raise NameError("Hello")
NameError: Hello
5. 自定义异常
python允许程序员通过继承内置的异常类型来定制自己的异常类型。
class MyError(Exception):
def __init__(self, value):
self.value = value
def __str__(self):
return repr(self.value)
try:
raise MyError(4)
except MyError as inst:
print("opps, MyError occurred, value:", inst.value)
这段代码执行结果为:opps, MyError occurred, value: 4
自定义异常类型的时候,尽量保持简单,提供有效的异常信息即可。
以上几点只是简单介绍,详细内容请参考官方文档。
分享到:
相关推荐
常见的Python异常包括IndexError(索引超出范围)、TypeError(操作符或函数应用于不兼容的类型)、KeyError(访问字典中不存在的键)、ValueError(值错误,如将非数字字符串转换为整数)、NameError(使用了未定义...
"Python 异常处理" Python 是一种高级编程语言,它提供了一个强大的异常处理机制,以便开发者能够更好地处理程序中的错误和异常。在 Python 中,异常是一种特殊的对象,它可以在程序执行过程中抛出,以便通知开发者...
自定义异常类是Python异常处理机制的一个重要组成部分。通过定义自定义异常类,你可以创建更清晰、更易于维护的代码,并提供更详细的错误信息。本文介绍了如何定义自定义异常类,以及如何在程序中使用它们。希望这些...
### Python异常处理与调试 #### 一、Python异常基础 ##### 1.1 异常的概念 在Python编程中,**异常**是一种用于处理程序运行时错误的机制。当程序遇到无法处理的情况时(例如除数为零、文件不存在、网络连接失败...
内容概要:本文详细介绍了 Python 中的异常处理机制,包括什么是异常、为何需要捕获异常以及具体的捕获方法(如捕获常规异常、特定异常、多种异常)、其他异常用法(如打印异常信息、else 子句和 finally 子句)和...
Python异常处理
Python 异常处理学习 Python 异常处理是 Python 编程语言中的一种错误处理机制,用于捕捉和处理程序中出现的异常情况。Python 中的异常处理可以分为两种:try-except 语句和 try-finally 语句。 try-except 语句的...
Python异常处理是编程中至关重要的一个部分,它允许程序员优雅地处理程序运行时可能出现的错误情况,而不是让程序突然崩溃。异常是程序在执行过程中遇到的错误,它们是Python对象,表示程序运行中的异常状态。当...
翻译自StackOverflow中一个关于Python异常处理的问答。 问题:为什么“except:pass”是一个不好的编程习惯? 我时常在StackOverflow上看到有人评论关于except: pass的使用,他们都提到这是一个不好的Python编程习惯...
Python异常处理函数和模块学习教案.pptx
Python异常处理是编程中至关重要的一个环节,它允许程序员优雅地处理程序运行时可能出现的错误,确保程序在遇到问题时不会突然崩溃。本教程通过30页的PPT课件,详细介绍了Python中的异常处理机制,帮助初学者掌握这...
Python异常处理是编程中至关重要的一个部分,它允许程序员优雅地处理程序运行时可能出现的错误,防止程序因未预期的状况而突然终止。在Python中,异常是通过异常对象来表示的,这些对象通常是在遇到错误时自动创建的...
Python异常处理是编程中至关重要的一个部分,它允许程序员优雅地处理程序运行时可能出现的错误。在Python中,异常是程序执行过程中导致流程中断的事件。这些异常可能是由于语法错误、除以零、文件未找到等操作引起的...
Python 异常处理是编程中不可或缺的一部分,它允许我们在代码执行过程中捕获并处理可能出现的错误,从而确保程序的稳定性和健壮性。本文将详细解释如何使用 `try...except` 结构,以及如何通过 `else` 和 `finally` ...
Python提供了一套完整的异常处理机制,允许开发者捕获和处理程序运行时发生的错误。通过合理地使用异常处理,可以提高程序的用户体验和错误容忍度。本文将详细介绍Python中的异常处理机制,包括异常的捕获、处理、抛...
### Python异常处理详解 #### 一、Python异常处理概述 Python是一种高级编程语言,它具有丰富的面向对象特性,包括强大的异常处理机制。异常处理在Python中是非常重要的一个方面,它可以帮助程序员有效地处理程序...
Python异常处理(markdown文档教程).md
什么是异常处理?什么情况下会发生异常?了解常见异常类,异常处理的语句,try ... except,多个except语句和一个except块