Python - 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.
   ......................

注意- 您可以提供 except 子句或finally 子句,但不能同时提供两者。else 子句不能与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()

如果您没有权限以写入模式打开文件,那么它将产生以下输出-

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

带参数的异常

异常可以有一个参数,该参数是提供有关问题的附加信息的值。参数的内容因例外情况而异。您可以通过在 except 子句中提供变量来捕获异常的参数,如下所示 -

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

如果编写代码来处理单个异常,则可以在 except 语句中在异常名称后面添加一个变量。如果要捕获多个异常,则可以在异常元组后面添加一个变量。

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

例子

以下是单个异常的示例 -

# 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")

它将产生以下输出-

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