开发者

User Based Exception program not working

开发者 https://www.devze.com 2023-01-30 17:57 出处:网络
This code does not work. Please tell what the error is.... class Error(Exception): def __init__(self,mssg):

This code does not work. Please tell what the error is....

class Error(Exception):
    def __init__(self,mssg):
        self.mssg = mssg

class InputError(Error):
    def __init__(self,val):
        super("Input Error")
        print val

Now I write in other part of my program

a = raw_input("Enter a number from 0-9: "开发者_C百科)
if (ord(a)>47 and ord(a)<58):
    pass
else:
    raise InputError(a)

Now when I pass 'a' I get super expected a type but got a string I just want to pass that message to the base class and display it along with the wrong value.

What am I doing wrong here


The problem is that you're using super() incorrectly. The proper way is:

class InputError(Error):
    def __init__(self, val):
        super(InputError, self).__init__(val)
        print val


super() is used to access methods of a superclass that have been overridden in the subclass, not to instantiate the superclass with arguments.

What you appear to be trying to do is something like:

class InputError(Error):
    def __init__(self,val):
        super(InputError).__init__("Input Error")
        print val

although this isn't necessarily a good idea.


super is supposed to be called like this:

class InputError(Error):
    def __init__(self,val):
        super(InputError, self).__init__("Input Error")
        print val


super is a python builtin which takes the type of an object as its argument, not some (arbitrary) string, as you seem to have done. You probably mean

 super(InputError, self).__init__("Input Error")

[In Python 3.x, this can just be super().__init__("Input Error")]

Note that because of the name of your exception is already InputError, it's not clear what the string message adds to it...

See this question and the python docs.

0

精彩评论

暂无评论...
验证码 换一张
取 消