Python 中的异常是什么?

pythonserver side programmingprogramming

异常是在程序执行过程中发生的事件,它会破坏程序指令的正常流程。通常,当 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 语句中处理该异常。


相关文章