Python中的异常是什么?
异常是程序执行过程中发生的一种事件,它打断了程序指令的正常流程。一般情况下,当Python脚本遇到无法处理的情况时,会引发一个异常。异常是表示错误的Python对象。
当Python脚本引发异常时,它必须立即处理异常,否则就会终止并退出。
更多Python相关文章,请阅读:Python 教程
处理异常
如果您有一些可能引发异常的可疑代码,可以将其放在一个 try :块中来保护您的程序。在try:块后面,包括一个 except :语句,后面跟着一段代码,该代码尽可能优雅地处理问题。
语法
这里是try….except…else块的简单语法 –
try:
在这里执行您的操作;
......................
except ExceptionI:
如果有ExceptionI,则执行此块。
except ExceptionII:
如果有ExceptionII,则执行此块。
......................
else:
如果没有异常,则执行此块。
以下是关于上述语法的几个重要点 –
- 一个try语句可以有多个except语句。当try块包含可能引发不同类型异常的语句时,这非常有用。
- 您还可以提供一个通用的except子句,它处理任何异常。
- 在除了except子句之外,您还可以包括一个else子句。如果try:块中的代码没有引发异常,则else块中的代码会执行。
- else块是放置不需要try:块保护的代码的好地方。
实例
此示例打开一个文件,在文件中写入内容,并因为一切顺利而平稳地退出 –
#!/usr/bin/python
try:
fh = open("testfile", "w")
fh.write("This is my test file for exception handling!!")
except IOError:
print "Error: can\'t find file or read data"
else:
print "Written content in the file successfully"
fh.close()
输出
这将产生以下结果 –
Written content in the file successfully
实例
此示例尝试打开一个您没有写入权限的文件,因此会引发异常 –
#!/usr/bin/python
try:
fh = open("testfile", "r")
fh.write("This is my test file for exception handling!!")
except IOError:
print "Error: can\'t find file or read data"
else:
print "Written content in the file successfully"
输出
这将产生以下结果 –
Error: can't find file or read data
没有异常的except子句
您还可以使用未定义任何异常的except语句,如下所示 –
try:
在这里执行您的操作;
......................
except:
如果有任何异常,则执行此块。
......................
else:
如果没有异常,则执行此块。
这种 try-except 语句捕获发生的所有异常。虽然使用这种try-except语句不被视为良好的编程实践,因为它捕获了所有异常,但并未使程序员确定可能发生的问题的根本原因。
含多个异常的except子句
您也可以使用相同的except语句来处理多个异常,如下所示 –
try:
# 在此处执行操作
......................
except(Exception1[, Exception2[,... ExceptionN]]]):
# 如果在指定的异常列表中有任何异常,
# 则执行此块。
......................
else:
# 如果没有异常就执行此块。
try-finally子句
您可以使用 finally :块和 try :块。finally块是一个必须执行的任何代码的位置,无论try-block是否引发异常。try-finally语句的语法如下 −
try:
# 在此处执行操作
......................
# 可能由于任何异常,此块可能被跳过。
finally:
# 总是会执行此块。
......................
您不能在finally子句中使用else子句。
示例
#!/usr/bin/python
try:
fh = open("testfile", "w")
fh.write("This is my test file for exception handling!!")
finally:
print "Error: can\'t find file or read data"
输出
如果您没有写入模式打开该文件的权限,那么将产生以下结果−
Error: can't find file or read data
同样的示例可以被更干净地编写,如下所示−
示例
#!/usr/bin/python
try:
fh = open("testfile", "w")
try:
fh.write("This is my test file for exception handling!!")
finally:
print "Going to close the file"
fh.close()
except IOError:
print "Error: can\'t find file or read data"
当在try块中抛出异常时,执行立即传递给finally块。在finally块中的所有语句执行完毕后,如果在try-except语句的下一层中存在,则再次引发异常并在except子句中处理该异常。