面试题答案
一键面试异常处理架构设计思路
- 自定义异常类:根据不同的业务异常类型,定义相应的自定义异常类,这样可以更清晰地区分不同类型的异常,并在捕获时进行针对性处理。
- 异常处理策略分层:在不同的调用层级,根据业务需求,决定是捕获并处理异常,还是将异常向上抛出。例如,底层模块可以将异常抛出,由上层模块决定如何处理;而上层模块可能有专门的异常处理层,根据不同的异常类型进行日志记录、返回特定的错误信息等操作。
- 日志记录:对于捕获并处理的异常,记录详细的日志信息,以便于排查问题。
关键代码示例
import logging
# 配置日志记录
logging.basicConfig(level=logging.INFO)
# 自定义业务异常类
class BusinessError1(Exception):
pass
class BusinessError2(Exception):
pass
# 模拟底层模块函数,可能引发异常
def low_level_function():
import random
num = random.randint(1, 2)
if num == 1:
raise BusinessError1("BusinessError1 occurred")
else:
raise BusinessError2("BusinessError2 occurred")
# 中层模块函数,捕获部分异常并处理,部分向上抛
def middle_level_function():
try:
low_level_function()
except BusinessError1:
logging.info("Caught BusinessError1 and handle it locally.")
# 本地处理逻辑,例如记录日志、返回特定值等
return "Handled BusinessError1"
# BusinessError2 不处理,向上抛
# 高层模块函数,捕获剩余异常并处理
def high_level_function():
try:
middle_level_function()
except BusinessError2:
logging.info("Caught BusinessError2 at high level.")
# 高层处理逻辑,例如返回给用户友好的错误信息
return "Error occurred: BusinessError2"
if __name__ == "__main__":
result = high_level_function()
print(result)
在上述代码中:
- 定义了
BusinessError1
和BusinessError2
两个自定义异常类,模拟不同的业务异常。 low_level_function
模拟底层模块函数,随机引发不同的异常。middle_level_function
捕获BusinessError1
并进行本地处理,而BusinessError2
则向上抛出。high_level_function
捕获middle_level_function
抛出的BusinessError2
并处理。通过这种分层的异常处理架构,可以灵活应对复杂的异常处理场景。