自定义异常适用于python 2.76但不适用于2.4

时间:2015-08-13 21:06:03

标签: python exception python-2.4

我需要一些帮助。最初这是在python 2.76下运行的一些代码的一部分。这现在需要在vanilla python 2.4安装下运行。我在2.76下学习并且无法弄清楚如何调整它以使用2.4。

这是一个自定义异常,在其他地方有时我会将stdout / stderr或其他信息传递给异常对象,以便在别处使用。

以下是例外:

class OpenSSLWalletError(Exception):
    def __init__(self, message, command=None, stdout=None, stderr=None):
        super(OpenSSLWalletError, self).__init__(message)
        self._message   = message
        self._command   = command
        self._stdout    = stdout
        self._stderr    = stderr

在2.4下,它抱怨:

Traceback (most recent call last):
  File "./testpywallet.py", line 20, in ?
    user = w.get("rest_ro.userX")
  File "./openssl.py", line 167, in get
    raise OpenSSLWalletError("Error: key '%s' not found in wallet '%s'" % (key_name, self.wallet), None, None, None)
  File "./openssl.py", line 27, in __init__
    super(OpenSSLWalletError, self).__init__(message)
TypeError: super() argument 1 must be type, not classobj

1 个答案:

答案 0 :(得分:1)

super()仅适用于新式课程。在Python 2.4中,异常不从object继承,它们仍然是旧式类。

直接调用父构造函数:

class OpenSSLWalletError(Exception):
    def __init__(self, message, command=None, stdout=None, stderr=None):
        Exception.__init__(self, message)
        self._message   = message
        self._command   = command
        self._stdout    = stdout
        self._stderr    = stderr

2.4异常机制无法处理新式类,因此object中的混合将无效。