这发生在 python2.6 和 python3 上:
class Error(Exception):
def __init__(self, args):
print(type(args))
print(type(self.args)) # From BaseException
self.args = args
print(type(self.args))
Error("foo")
这导致:
<type 'str'>
<type 'tuple'>
<type 'tuple'>
Error('f', 'o', 'o')
出于某种原因, args 属性被强制转换为元组。它在 C 中定义的事实可能与它有关吗?https://github.com/python/cpython/blob/master/Objects/exceptions.c
args 参数的名称不相关。将其更改为“a”会导致相同的行为,只要将其分配给 self.args。