Python 中的异常是什么?
异常是在程序执行过程中发生的事件,它会破坏程序指令的正常流程。通常,当 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 子句
您还可以使用没有异常的 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 子句
您还可以使用相同的 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.
try-finally 子句
您可以将 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 语句中处理该异常。