これは、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 に割り当てられている限り、同じ動作になります。