在 Python 中,try-except
块用于优雅地处理异常和错误,确保即使出现问题时你的程序也能继续运行。本教程将涵盖使用 try-except
块的基本知识、语法以及最佳实践。
异常处理使你能够通过捕获异常并采取适当的行动来管理代码中的错误,而不是让程序崩溃。异常是在程序执行期间发生的错误,处理这些异常确保了你的程序能够响应意外情况。
Python 中的 try-except
块
在 Python 中,try-except
块用于捕捉和处理异常。可能会导致异常的代码被放置在 try
块内,而处理异常的代码则放置在 except
块内。
语法
以下是 Python 中 try-except
块的基本语法:
try:
risky_code()
except SomeException as e:
handle_exception(e)
示例
在这个例子中,如果你输入非数字值,将会引发 ValueError
。如果你输入零,则会引发 ZeroDivisionError
。except
块处理这些异常并打印相应的错误信息:
try:
number = int(input("请输入一个数字: "))
result = 10 / number
print(f"结果: {result}")
except ZeroDivisionError as e:
print("错误: 不能除以零。")
except ValueError as e:
print("错误: 输入无效,请输入有效的数字。")
处理多个异常
在 Python 中,你可以使用单个 try-except
语句内的多个 except
块来处理多种类型的异常。这允许你的代码在执行过程中对不同类型的错误作出不同的响应。
语法
以下是用于处理 Python 中多个异常的基本语法:
try:
risky_code()
except FirstExceptionType:
handle_first_exception()
except SecondExceptionType:
handle_second_exception()
示例
在以下示例中:
-
如果你输入零作为除数,将会引发
ZeroDivisionError
,对应的 except ZeroDivisionError
块将会通过打印错误消息来处理它;
-
如果你为被除数或除数输入非数字输入,将会引发
ValueError
,except ValueError
块将会通过打印不同的错误消息来处理它。
try:
dividend = int(input("请输入被除数: "))
divisor = int(input("请输入除数: "))
result = dividend / divisor
print(f"除法的结果: {result}")
except ZeroDivisionError:
print("错误: 不能除以零。")
except ValueError:
print("错误: 输入无效,请输入有效的整数。")
使用 try-except
块中的 else
子句
在 Python 中,else
子句可以与 try-except
块一起使用,以指定仅在 try
块中未发生异常的情况下才运行的代码。这提供了一种区分可能会引发异常的主要代码和仅应在正常情况下执行的附加代码的方法。
语法
以下是 Python 中 else
子句的基本语法:
try:
risky_code()
except SomeExceptionType:
handle_exception()
else:
no_exceptions_code()
示例
在以下示例中:
-
如果你输入非整数输入,将会引发
ValueError
,对应的 except ValueError
块将会处理它;
-
如果你输入零作为分母,将会引发
ZeroDivisionError
,对应的 except ZeroDivisionError
块将会处理它;
-
如果除法成功(即,没有引发异常),
else
块将会执行并打印除法的结果。
try:
numerator = int(input("请输入分子: "))
denominator = int(input("请输入分母: "))
result = numerator / denominator
except ValueError:
print("错误: 输入无效,请输入有效的整数。")
except ZeroDivisionError:
print("错误: 不能除以零。")
else:
print(f"除法的结果: {result}")
finally
子句
finally
子句提供了一种机制,保证特定的代码无论是否引发了异常都将被执行。这对于执行诸如关闭文件或网络连接、释放锁或释放资源等清理动作是有用的。
语法
以下是 Python 中 finally
子句的基本语法:
try:
risky_code()
except SomeExceptionType:
handle_exception()
else:
no_exceptions_code()
finally:
cleanup_code()
示例
在这个例子中:
-
如果文件 "example.txt" 存在,其内容会被读取并打印,
else
块确认操作成功;
-
如果找不到文件 (
FileNotFoundError
),则会在 except
块中打印合适的错误消息;
-
finally
块确保文件无论文件操作是否成功或异常发生都将被关闭 (file.close()
)。
try:
file = open("example.txt", "r")
content = file.read()
print(content)
except FileNotFoundError:
print("错误: 文件未找到。")
else:
print("文件读取操作成功。")
finally:
if 'file' in locals():
file.close()
print("文件操作已完成。")