在编写程序时,总会有各种各样的错误发生,例如文件未找到、除以零、类型错误等。Python 提供了一种机制,可以捕获这些错误并进行处理,而不是让程序崩溃。这种机制就是异常处理。
try
语句块的结构一个完整的 try
语句块可以包含以下部分:
try
块:包含可能引发异常的代码。except
块:捕获并处理特定异常。else
块:如果 try
块没有引发异常,则执行此块。finally
块:无论是否引发异常,都会执行此块。基本语法
try:
# 可能会引发异常的代码
pass
except SomeException as e:
# 当捕获到 SomeException 时执行的代码
pass
else:
# 如果 try 块没有引发异常,则执行此处代码
pass
finally:
# 无论是否引发异常,都会执行此处代码
pass
try
和 except
是 Python 中用于异常处理的关键字。它们允许你在代码中捕获和处理错误,而不是让程序因为未处理的异常而崩溃。通过使用 try
和 except
,你可以在出现错误时执行特定的代码,从而提高程序的健壮性。
try:
# 可能会引发异常的代码
pass
except SomeException as e:
# 当捕获到 SomeException 时执行的代码
print(f"An error occurred: {e}")
以下是一个简单的示例,展示了如何使用 try
和 except
捕获并处理除零错误 (ZeroDivisionError
):
try:
result = 10 / 0
except ZeroDivisionError as e:
print(f"Error: {e}")
print("Program continues...")
输出:
Error: division by zero
Program continues...
在这个示例中,尝试执行 10 / 0
会引发 ZeroDivisionError
。该异常被 except ZeroDivisionError
块捕获,并打印错误信息。程序不会崩溃,会继续执行后续代码。
你可以在一个 try
块中捕获多种类型的异常:
try:
file = open('non_existent_file.txt', 'r')
result = 10 / 0
except FileNotFoundError as e:
print(f"File error: {e}")
except ZeroDivisionError as e:
print(f"Math error: {e}")
print("Program continues...")
输出:
File error: [Errno 2] No such file or directory: 'non_existent_file.txt'
Program continues...
这里我们尝试打开一个不存在的文件,导致 FileNotFoundError
被捕获并处理。如果文件存在,但仍然有除零操作,ZeroDivisionError
会被捕获。
虽然不推荐,但你可以使用通用的 Exception
类来捕获所有可能的异常:
try:
result = 10 / 0
except Exception as e:
print(f"An unexpected error occurred: {e}")
print("Program continues...")
尽管这可以捕获所有异常,但通常建议只捕获你预期的、可以合理处理的异常类型,以避免隐藏潜在的编程错误。
else
else
子句中的代码仅在没有引发异常时执行:
try:
result = 10 / 2
except ZeroDivisionError as e:
print(f"Error: {e}")
else:
print(f"Result is: {result}")
输出:
Result is: 5.0
finally
finally
子句中的代码无论是否发生异常都会执行,常用于清理资源:
try:
file = open('example.txt', 'r')
content = file.read()
except FileNotFoundError as e:
print(f"Error: {e}")
finally:
if 'file' in locals():
file.close()
print("File closed")
print("Program continues...")
即使 try
块内出现异常,finally
块仍会执行以确保文件正确关闭。
以下是一个更综合的示例,演示如何使用 try
, except
, else
和 finally
:
def divide(a, b):
try:
result = a / b
except ZeroDivisionError as e:
print(f"Error: {e}")
else:
print(f"Result is: {result}")
finally:
print("Execution complete")
divide(10, 2)
divide(10, 0)
输出:
Result is: 5.0
Execution complete
Error: division by zero
Execution complete
希望这可以帮助你理解和使用 try
和 except
来处理异常,提高代码的健壮性。