在 Python 中,错误和异常处理是编写健壮程序的重要组成部分。下面是一些关于错误和异常处理的基本知识:
错误(Errors)和异常(Exceptions):
-
错误: 错误是程序的语法或逻辑错误,可能导致程序无法执行。错误分为语法错误和逻辑错误。
语法错误: 在代码的编写阶段就发现的错误,通常是由于违反了 Python 的语法规则。
逻辑错误: 在代码的运行阶段发现的错误,通常是由于程序的逻辑错误或算法错误。 -
异常: 异常是程序在运行时遇到的非致命问题,它导致程序停止执行并引发异常。Python 中有许多内置的异常类型,如
ZeroDivisionError
、TypeError
、FileNotFoundError
等。
异常处理:
在 Python 中,使用 try
, except
, else
, 和 finally
等关键字进行异常处理。
try 语句按照如下方式工作:
首先,执行try子句(在关键字try和关键字 except 之间的语句)。
如果没有异常发生,忽略子句除外,尝试子句执行后结束。
如果在执行尝试子句的过程中发生了异常,那么尝试子句余下的部分将被忽略。如果异常的类型和 except 后面的名称一致,那么对应的 except 子句将被执行。
如果一个异常没有与任何的除了匹配,那么这个异常不会传递给上层的 try 中。
一个try语句可能包含多个except子句,分别来处理不同的特定的异常,其中只有一个分支会被执行。
处理程序将仅针对对应的 try 子句中的异常进行处理,而不是其他 try 的处理程序中的异常。
基本的异常处理结构:
try:# 代码块,可能引发异常的地方result = 10 / 0
except ZeroDivisionError:# 异常处理代码块,处理 ZeroDivisionError 异常print("Cannot divide by zero!")
else:# 如果没有异常发生,执行此块print("Division successful!")
finally:# 无论是否发生异常,都会执行此块print("This block will always execute.")
捕获多个异常:
try:# 代码块result = int("abc") # 这里会引发 ValueError
except (ValueError, TypeError) as e:# 处理多个异常类型print(f"An error occurred: {e}")
自定义异常:
# 定义一个自定义异常类
class MyCustomError(Exception):passtry:# 触发自定义异常raise MyCustomError("This is a custom error.")
except MyCustomError as e:print(f"Caught an exception: {e}")
异常的传递:
def example_function():try:# 代码块result = 10 / 0except ZeroDivisionError:# 处理异常print("Cannot divide by zero!")# 将异常传递到上一层raisetry:example_function()
except ZeroDivisionError as e:print(f"Caught an exception from the function: {e}")
异常处理是编写稳健代码的关键部分,它可以帮助程序在发生错误时以一种有序的方式处理问题,提高程序的健壮性。