Python - try-except 代码块



Python try-except 代码块

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

异常处理允许您通过捕获异常并采取适当措施来管理代码中的错误,而不是让程序崩溃。异常是在程序执行期间发生的错误,处理这些异常可以确保您的程序能够响应意外情况。

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

语法

以下是 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)

示例

在这个例子中,如果您输入非数字值,将会引发 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.")

处理多个异常

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

语法

以下是 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

示例

在以下示例中:

  • 如果您输入零作为除数,将会引发 "ZeroDivisionError",相应的 except ZeroDivisionError 代码块将处理它并打印错误信息。
  • 如果您为被除数或除数输入非数字输入,将会引发 "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.")

在 Try-Except 块中使用 Else 子句

在 Python 中,else 子句可以与 try-except 块一起使用,以指定仅在 try 块中没有发生异常时才应运行的代码。这提供了一种方法来区分可能引发异常的主代码和仅在正常情况下才应执行的其他代码。

语法

以下是 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()

示例

在以下示例中:

  • 如果输入非整数,则会引发 ValueError,并且相应的 except ValueError 块将处理它。
  • 如果输入零作为分母,则会引发 ZeroDivisionError,并且相应的 except ZeroDivisionError 块将处理它。
  • 如果除法成功(即没有引发异常),则 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}")

Finally 子句

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

语法

以下是 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.txt”存在,则读取并打印其内容,并且 else 块确认操作成功。
  • 如果找不到文件(FileNotFoundError),则在 except 块中打印相应的错误消息。
  • 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.")
广告