Python 简明教程

Python - The try-except Block

Python Try-Except Block

在 Python 中,try-except 块用于优雅地处理异常和错误,确保您的程序即使在出现问题时也能继续运行。本教程将介绍 try-except 块的基本用法、其语法和最佳实践。

Python 中的 try-except 块用于捕获和处理异常。可能导致异常的代码放在 try 块中,而处理异常的代码放在 except 块中。

Syntax

以下是 Python 中 try-except 块的基本语法 −

try:
   # Code that might cause an exception
   risky_code()
except SomeException as e:
   # Code that runs if an exception occurs
   handle_exception(e)

Example

在此示例中,如果您输入非数字值,将引发“ ValueError ”。如果您输入零,将引发“ ZeroDivisionError ”。except 块处理这些异常并打印相应的错误消息 −

try:
   number = int(input("Enter a number: "))
   result = 10 / number
   print(f"Result: {result}")
except ZeroDivisionError as e:
   print("Error: Cannot divide by zero.")
except ValueError as e:
   print("Error: Invalid input. Please enter a valid number.")

Handling Multiple Exceptions

在 Python 中,您可以在单个 try-except 语句中使用多个 except 块来处理多种类型的异常。这样,您的代码就可以对执行期间可能发生的各种类型的错误做出不同的响应。

Syntax

以下是 Python 中处理多种异常的基本语法 −

try:
   # Code that might raise exceptions
   risky_code()
except FirstExceptionType:
   # Handle the first type of exception
   handle_first_exception()
except SecondExceptionType:
   # Handle the second type of exception
   handle_second_exception()
# Add more except blocks as needed for other exception types

Example

在以下示例中 -

  1. 如果您将零输入为除数,将引发 “ZeroDivisionError”,并且相应的 except ZeroDivisionError 块通过打印错误消息来处理它。

  2. 如果您为被除数或除数输入非数字输入,将引发 “ValueError”,并且 except ValueError 块通过打印不同的错误消息来处理它。

try:
   dividend = int(input("Enter the dividend: "))
   divisor = int(input("Enter the divisor: "))
   result = dividend / divisor
   print(f"Result of division: {result}")
except ZeroDivisionError:
   print("Error: Cannot divide by zero.")
except ValueError:
   print("Error: Invalid input. Please enter valid integers.")

Using Else Clause with Try-Except Block

在 Python 中,else 子句可以与 try-except 块结合使用,以指定仅在 try 块中未发生异常时才应运行的代码。这提供了一种方法来区分可能引发异常的主代码和仅在正常条件下才应执行的附加代码。

Syntax

以下是 Python 中 else 子句的基本语法 −

try:
   # Code that might raise exceptions
   risky_code()
except SomeExceptionType:
   # Handle the exception
   handle_exception()
else:
   # Code that runs if no exceptions occurred
   no_exceptions_code()

Example

在以下示例中 -

  1. 如果你输入了非整数,就会引发 ValueError,相应的 except ValueError 块会处理它。

  2. 如果你输入零作为分母,就会引发 ZeroDivisionError,相应的 except ZeroDivisionError 块会处理它。

  3. 如果除法成功(即不引发任何异常),else 块将执行并打印除法的结果。

try:
   numerator = int(input("Enter the numerator: "))
   denominator = int(input("Enter the denominator: "))
   result = numerator / denominator
except ValueError:
   print("Error: Invalid input. Please enter valid integers.")
except ZeroDivisionError:
   print("Error: Cannot divide by zero.")
else:
   print(f"Result of division: {result}")

The Finally Clause

不管是否引发异常,finally 子句提供了一个机制来保证执行特定的代码。这对于执行清理操作(例如关闭文件或网络连接、释放锁或释放资源)很有用。

Syntax

以下是在 Python 中 finally 子句的基本语法 −

try:
   # Code that might raise exceptions
   risky_code()
except SomeExceptionType:
   # Handle the exception
   handle_exception()
else:
   # Code that runs if no exceptions occurred
   no_exceptions_code()
finally:
   # Code that always runs, regardless of exceptions
   cleanup_code()

Example

在此示例中 -

  1. 如果文件“example.txt”存在,就会读取并打印其内容,而 else 块确认操作成功。

  2. 如果文件未找到(FileNotFoundError),except 块中会打印一条适当的错误消息。

  3. 无论文件操作是否成功或出现异常,finally 块都能确保文件 (file.close()) 关闭。

try:
   file = open("example.txt", "r")
   content = file.read()
   print(content)
except FileNotFoundError:
   print("Error: The file was not found.")
else:
   print("File read operation successful.")
finally:
   if 'file' in locals():
      file.close()
   print("File operation is complete.")