在类中引发TypeError

时间:2016-11-22 16:15:18

标签: python class python-3.x exception

我有以下简单的代码:

class testing:
    def __init__(self, arg1, arg2, arg3):
        self.arg1 = arg1
        self.arg2 = arg2
        self.arg3 = arg3

if __name__ == '__main__':
    arg_1 = testing("a", "b", "c")

当我执行它时一切正常但是当我用arg_1这样增加"d"时:

if __name__ == '__main__':
    arg_1 = testing("a", "b", "c", "d")

我收到以下错误:

TypeError: __init__() takes 4 positional arguments but 5 were given

现在我想提出一个例外:

class testing:
    def __init__(self, arg1, arg2, arg3):
        try:
            self.arg1 = arg1
            self.arg2 = arg2
            self.arg3 = arg3
        except TypeError:
            print("Error, to many values")

if __name__ == '__main__':
    arg_1 = testing("a", "b", "c", "d")

我收到相同的错误消息。我做错了什么?

2 个答案:

答案 0 :(得分:2)

在初始化调用期间隐式传递了

selftry-except甚至不会执行,调用时会发生错误。你已经指定了三个额外的args,而不是四个。

如果您需要来检查是否应该在try-except初始化时包装调用

if __name__ == '__main__':
    try:
        arg_1 = testing("a", "b", "c", "d")
    except TypeError:
        print("Error, to many values")

无论你需要什么目的。

答案 1 :(得分:1)

Python在尝试调用 init ()时抛出错误,因此永远不会达到您的自定义错误。如果要在这种情况下使用自定义错误,则需要使用* args支持变量参数长度。

if __name__ == '__main__':