如何序列化异常

2024-05-16 02:46:13 发布

您现在位置:Python中文网/ 问答频道 /正文

当我尝试使用json.dump序列化异常时,会出现如下错误

TypeError: IOError('socket error', error(61, 'Connection refused')) is not JSON serializable

以及

TypeError: error(61, 'Connection refused') is not JSON serializable

异常的__dict__字段是{}(这就是How to make a class JSON serializable对我没有帮助的原因:这里的答案假设__dict__包含所有必要的信息,它们还假设我可以控制要序列化的类)。

有什么比拯救str(exn)更聪明的东西吗?

我更喜欢人类可读的文本表示(而不是pickle)。

附:这是我想到的:

def exception_as_dict(ex):
    return dict(type=ex.__class__.__name__,
                errno=ex.errno, message=ex.message,
                strerror=exception_as_dict(ex.strerror)
                if isinstance(ex.strerror,Exception) else ex.strerror)

json.dumps(exception_as_dict(err),indent=2)
{
  "errno": "socket error", 
  "type": "IOError", 
  "strerror": {
    "errno": 61, 
    "type": "error", 
    "strerror": "Connection refused"
  }
}

Tags: json序列化astypeexceptionerrorconnectiondict