首页 > 解决方案 > 在 try/except 子句中传递字典

问题描述

我有一个用例需要在 Python 3.x 的 try/exception 子句中传递字典

可以使用函数将错误消息作为字符串访问str(),但我不知道是谁将其作为字典获取。

try:
    raise RuntimeError({'a':2})
except Exception as e:
    error = e
    print(error['a'])

e是一个 RuntimeError 对象,我找不到任何以原始格式返回消息的方法。

标签: pythonpython-3.x

解决方案


异常将它们的 init args 存储在“args”属性中:

try: 
    raise RuntimeError({'a':2}) 
except Exception as e: 
    (the_dict,) = e.args 
    print(the_dict["a"])

话虽如此,如果您想要一个具有关联的结构化键/值上下文的异常类型,最好为此目的定义您自己的自定义异常子类,而不是RuntimeError直接重用标准库的子类。这是因为如果您捕获此类异常并尝试解压缩字典上下文,您将需要以RuntimeError不同于RuntimeError标准库可能引发的实例的方式检测和处理您的实例。完全使用不同的类型将使您在代码中区分这两种情况变得更加清晰和容易。


推荐阅读