Python 简明教程

Python - The try-finally Block

Python Try-Finally Block

在 Python 中,try-finally 块用于确保执行特定代码,无论是否引发异常。与处理异常的 try-except 块不同,try-finally 块主要关注必须发生的清理操作,确保正确释放资源并完成关键任务。

Syntax

try-finally 语句的语法如下——

try:
   # Code that might raise exceptions
   risky_code()
finally:
   # Code that always runs, regardless of exceptions
   cleanup_code()

Example

我们考虑一个示例,在其中我们希望以写入模式 ("w") 打开一个文件,向其中写入一些内容,并确保无论使用 finally 块成功还是失败,文件都已关闭——

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")
   fh.close()

如果您没有以写模式打开文件的权限,那么它将生成以下 output

Error: can't find file or read data

相同的示例可以更简洁地写为如下 −

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 语句中处理。

Exception with Arguments

异常可以具有一个参数,它是一个关于问题提供附加信息的值。参数的内容根据异常而有所不同。你通过如下在 except 子句中提供一个变量来捕获异常的参数:

try:
   You do your operations here
   ......................
except ExceptionType as Argument:
   You can print value of Argument here...

如果编写代码来处理单个异常,则可以在 except 语句中让一个变量跟在异常名称后面。如果正在捕捉多个异常,则可以让一个变量跟在异常元组的后面。

此变量接收异常的值,该值大多包含异常的成因。此变量可以接收单个值,或以元组形式接收多个值。此元组通常包含错误字符串、错误号和错误位置。

Example

下面是一个处理单个异常的示例:

# Define a function here.
def temp_convert(var):
   try:
      return int(var)
   except ValueError as Argument:
      print("The argument does not contain numbers\n",Argument)
# Call above function here.
temp_convert("xyz")

它将生成以下 output

The argument does not contain numbers
invalid literal for int() with base 10: 'xyz'