By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
440,621 Members | 1,074 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 440,621 IT Pros & Developers. It's quick & easy.

class 'Exception', unable to use 'super' to call superclass initializer

P: n/a
Hi,

environment: Python 2.4, GNU/Linux, kernel 2.6.12.2

having subclassed 'Exception' I'm trying to call the initialiser
__init__(...) of the superclass Exception with 'super(..).__init__(..)' .
However, trying to do so results in a
'TypeError: super() argument 1 must be type, not classobj'.

Now, if I use 'Exception.__init__(..)' instad of super(..)... ,everything
works just as one would expect.

Why does 'super(..).__init__(..)' fail?
thank you for any suggestions
chriss

Here is some example code to illustrate the point:
class WorkingException(Exception):

def __init__(self, message):
# works as I would expect
Exception.__init__(self, message)
class BrokenException(Exception):

def __init__(self, message):
# fails with a typeError
super(BrokenException, self).__init__(self, message)
# --------- case 1 ---------
try:
raise WorkingException("Hello WorkingException")

except WorkingException, e:
print e
# --------- case 3 ---------

try:
raise BrokenException("Hello BrokenException")
except BrokenException, e:
print e

Sep 10 '05 #1
Share this Question
Share on Google+
3 Replies


P: n/a
chriss wrote:
Hi,

environment: Python 2.4, GNU/Linux, kernel 2.6.12.2

having subclassed 'Exception' I'm trying to call the initialiser
__init__(...) of the superclass Exception with 'super(..).__init__(..)' .
However, trying to do so results in a
'TypeError: super() argument 1 must be type, not classobj'.

Now, if I use 'Exception.__init__(..)' instad of super(..)... ,everything
works just as one would expect.

Why does 'super(..).__init__(..)' fail?


Exceptions do not inherit from 'object'; they are old-style classes.

super() can be used only with new-style classes (which subclass 'object').

-Peter
Sep 10 '05 #2

P: n/a
chriss wrote:
Hi,

environment: Python 2.4, GNU/Linux, kernel 2.6.12.2

having subclassed 'Exception' I'm trying to call the initialiser
__init__(...) of the superclass Exception with 'super(..).__init__(..)' .
However, trying to do so results in a
'TypeError: super() argument 1 must be type, not classobj'.

Now, if I use 'Exception.__init__(..)' instad of super(..)... ,everything
works just as one would expect.

Why does 'super(..).__init__(..)' fail?


AFAICT, the Exception hierarchy are still old-style classes while
super() only works on new-style classes.

--
Robert Kern
rk***@ucsd.edu

"In the fields of hell where the grass grows high
Are the graves of dreams allowed to die."
-- Richard Harter

Sep 10 '05 #3

P: n/a
Peter Hansen wrote:
chriss wrote:
Hi,

environment: Python 2.4, GNU/Linux, kernel 2.6.12.2

having subclassed 'Exception' I'm trying to call the initialiser
__init__(...) of the superclass Exception with 'super(..).__init__(..)' .
However, trying to do so results in a
'TypeError: super() argument 1 must be type, not classobj'.

Now, if I use 'Exception.__init__(..)' instad of super(..)... ,everything
works just as one would expect.

Why does 'super(..).__init__(..)' fail?


Exceptions do not inherit from 'object'; they are old-style classes.

super() can be used only with new-style classes (which subclass 'object').

-Peter


That explains it all right.
Thank you very much for your answer.

chriss
Sep 10 '05 #4

This discussion thread is closed

Replies have been disabled for this discussion.