【问题标题】:Suitable error when limitting the number of args限制参数数量时的合适错误
【发布时间】:2021-11-30 15:04:48
【问题描述】:

哪一个是 Python 中合适的 基本错误,用于限制在函数中传递的 参数数量

我想将其限制为 2 个参数,如下所示:

def func(*args):

    if len(args) == 1:
        # Do one thing
        
    elif len(args) == 2:
        # Do another thing
    
    else:
        ## raise an error ## 

【问题讨论】:

  • 为什么不写两个函数呢?
  • 会脱离函数逻辑
  • 那么我认为这个 SO stackoverflow.com/a/1964247/9479128 可能会通过继承 TypeError 来回答你的问题
  • 哦,太好了,@Nathan Furnal 感谢您提供的信息,尽管我不想子类化。

标签: python error-handling


【解决方案1】:

我认为TypeError 可以。这表明输入在结构上不正确。 Doc here

【讨论】:

    【解决方案2】:

    您可以使用 raise 关键字引发错误。

    else:
        raise TypeError
    

    您还可以指定自定义信息。

        raise TypeError(f"func() takes exactly one argument ({len(args)} given)")
    

    【讨论】:

    • 谢谢@sabz!我怀疑什么样的错误适合这个问题。那么,TypeError 适合吗?
    【解决方案3】:

    我建议TypeError。这表明输入在结构上不正确,即参数太多。

    https://docs.python.org/3/library/exceptions.html#TypeError

    【讨论】:

      【解决方案4】:

      我想提出一个不同的解决方案,它不依赖于错误处理,而是依赖于multipledispatch。我不建议在生产中使用它,因为它不是基本功能,但我认为它仍然很有趣。不过,这确实解决了参数数量问题。

      这是一个示例,其中具有相同名称的函数根据参数类型和参数数量表现不同。你需要multipledispatch library

      from multipledispatch import dispatch
      
      @dispatch(int)
      def func(x: int):
          return x**2
      
      @dispatch(int, int)
      def func(base: int, power: int):
          return base**power
      
      @dispatch(int, str)
      def func(base: int, power: str):
          return f"{base}^{power}"
      
      
      func(3)
      >>> 9
      
      func(2, 3)
      >>> 8
      
      func(2, "3")
      >>> '2^3'
      

      【讨论】:

      • 非常有趣,非常感谢!
      猜你喜欢
      • 2017-09-21
      • 2022-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多