【问题标题】:Raise TypeError in class在课堂上引发 TypeError
【发布时间】:2017-04-06 09:55:57
【问题描述】:

我有以下简单的代码:

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")

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

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")

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

【问题讨论】:

    标签: python class python-3.x exception


    【解决方案1】:

    self 在初始化调用期间被隐式传递。 try-except 甚至不会被执行,错误发生在 调用 时。您指定了三个额外的参数,而不是四个。

    如果您需要进行检查,则应将初始化时发出的调用包装在try-except中:

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

    用于任何您需要的目的。

    【讨论】:

      【解决方案2】:

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

      class testing:
          def __init__(self, *args):
              if len(args) > 3:
                  print("Error, too many values")
                  return
              self.arg1 = args[0]
              self.arg2 = args[1]
              self.arg3 = args[2]
      
      if __name__ == '__main__':
          arg_1 = testing("a", "b", "c")
      

      【讨论】:

        猜你喜欢
        • 2015-11-13
        • 1970-01-01
        • 1970-01-01
        • 2019-07-03
        • 1970-01-01
        • 1970-01-01
        • 2019-05-13
        • 2015-03-31
        • 1970-01-01
        相关资源
        最近更新 更多