面试题答案
一键面试import logging
import contextlib
def connect_to_database():
try:
with contextlib.suppress(ImportError):
# 假设这里是导入数据库驱动的代码
import some_database_driver
try:
# 假设这里是建立数据库连接的代码
connection = some_database_driver.connect(timeout=5)
return connection
except TimeoutError as e:
logging.error(f"连接超时: {e}")
raise
except ImportError as e:
logging.error(f"数据库驱动未安装: {e}")
raise
异常处理过程
- 导入数据库驱动:使用
contextlib.suppress(ImportError)
来抑制ImportError
异常。如果导入失败,异常会被捕获并记录日志,然后重新抛出异常。 - 建立数据库连接:尝试建立数据库连接,如果连接超时,
TimeoutError
异常会被捕获,记录日志并重新抛出异常。
异常链的作用
异常链允许在捕获并重新抛出异常时,保留原始异常的信息。当调用者捕获重新抛出的异常时,可以通过__cause__
属性访问原始异常,这有助于定位问题根源。例如,如果在连接数据库时因为导入驱动失败而引发异常,调用者可以通过异常链追溯到ImportError
,了解到是驱动未安装导致的问题。这样在调试和排查问题时,能够提供更全面和准确的信息。