异常是事件,该事件在程序执行期间发生,破坏了程序指令的正常流程。通常,当Python脚本遇到无法解决的情况时,它将引发异常。异常是表示错误的Python对象。
当Python脚本引发异常时,它必须立即处理该异常,否则它将终止并退出。
如果您有一些可疑代码可能引发异常,则可以通过将可疑代码放在try:块中来保护程序。在try:块之后,包括一个except:语句,然后是一段代码,该代码块尽可能优雅地处理问题。
这是try .... except ... else块的简单语法-
try: You do your operations here; ...................... except ExceptionI: If there is ExceptionI, then execute this block. except ExceptionII: If there is ExceptionII, then execute this block. ...................... else: If there is no exception then execute this block.
以下是有关上述语法的一些要点-
一个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语句,没有异常定义如下:
try: You do your operations here; ...................... except: If there is any exception, then execute this block. ...................... else: If there is no exception then execute this block.
这种try-except语句捕获所有发生的异常。但是,使用这种try-except语句并不是一种好的编程习惯,因为它可以捕获所有异常,但不能使程序员识别可能出现的问题的根本原因。
您还可以使用相同的except语句来处理多个异常,如下所示:
try: You do your operations here; ...................... except(Exception1[, Exception2[,...ExceptionN]]]): If there is any exception from the given exception list, then execute this block. ...................... else: If there is no exception then execute this block.
您可以将finally:块与try:块一起使用。finally块是放置必须执行的所有代码的位置,无论try块是否引发异常。try-finally语句的语法是:
try: You do your operations here; ...................... Due to any exception, this may be skipped. finally: This would always be executed. ......................
您不能同时使用else子句和finally子句。
#!/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语句中对其进行处理。