Python中关于异常处理的问题

像这种有什么优雅的处理方法?
try..except ? 但是错误异常太多了(像这个 exc.DataError,其他的还有 OptionError ),一个个 except ?
Python中关于异常处理的问题
3 回复
在Python里处理异常,核心就三件事:用 try/except 抓住错误、用 else/finally 做收尾、该抛异常时就抛异常。下面是一个典型场景的完整代码:
def process_data(data):
"""处理数据,演示完整的异常处理结构"""
result = None
try:
# 主要业务逻辑
if not data:
raise ValueError("数据不能为空") # 主动抛出异常
result = int(data) * 2 # 可能触发 ValueError
except ValueError as e:
print(f"数据格式错误: {e}")
# 可以在这里处理或重新抛出
raise # 重新抛出给上层
except (TypeError, KeyError):
print("发生了类型或键错误")
except Exception as e:
print(f"未知错误: {e}")
# 记录日志等操作
else:
# 只有当try块没有异常时才执行
print(f"处理成功,结果是: {result}")
finally:
# 无论是否异常都会执行,适合清理资源
print("清理资源...")
return result
# 测试用例
if __name__ == "__main__":
# 正常情况
print("测试1:", process_data("10"))
# 触发ValueError
try:
print("测试2:", process_data("abc"))
except ValueError:
print("外层捕获到ValueError")
# 空数据
try:
print("测试3:", process_data(""))
except ValueError as e:
print(f"外层捕获: {e}")
关键点:
- 精确捕获:先捕获具体的异常(如ValueError),最后用Exception兜底
- 异常传递:在except里用
raise重新抛出,让调用者知道出错 - 资源清理:finally块确保文件关闭、连接释放等操作一定执行
- else用途:把正常逻辑和异常处理分开,代码更清晰
总结:异常处理要精确,别用裸except。
The base exception class is SQLAlchemyError. Exceptions which are raised as a result of DBAPI exceptions are all subclasses of DBAPIError.
#1
from sqlalchemy.exc import DBAPIError, SQLAlchemyError
try:
# code
except DBAPIError:
print(‘dbapi’)
except SQLAlchemyError:
print(‘sqlalchemy’)
然而并没有什么事情发生

