【问题标题】:Appropriate Python error type for argument type mismatches参数类型不匹配的适当 Python 错误类型
【发布时间】:2013-09-26 01:25:44
【问题描述】:

我正在寻找等效的 PHPs InvalidArgumentException 以防函数获取类型不正确的参数。我正在使用 Python 3。(而且我对 Python 还是很陌生。)

ValueError documentation 声明“参数类型正确但值不合适”,因此此处不适合使用。

TypeError documentation 声明“在将操作或函数应用于不适当类型的对象时引发”,因此似乎也不适用。

在我的情况下使用的正确错误类型是什么?

【问题讨论】:

  • 为什么觉得TypeError不好?
  • 你在写什么样的函数需要类型检查?

标签: python python-3.x typeerror


【解决方案1】:
int([])
#>>> Traceback (most recent call last):
#>>>   File "<string>", line 88, in <module>
#>>>   File "", line 1, in <module>
#>>> TypeError: int() argument must be a string or a number, not 'list'

这不是您要寻找的错误吗?

请注意,类型检查是不明智的,因为如果它不支持所需的接口并且检查允许鸭式输入,它无论如何都会抛出错误。

【讨论】:

  • 我知道在 Python 社区中,duck-typing 被普遍接受并且类型检查不被接受。我通常不喜欢鸭式打字,因为它不利于错误局部性,而且不那么严格。不过这是个人喜好,两种方法都有其优点。
【解决方案2】:

在你的情况下,我会选择TypeError

函数被应用到不合适类型的对象可以理解为传递了错误类型的参数(函数被应用到它的参数)。 p>

例如,len(42) 引发 TypeError,因为 len() 不能应用于数字。

【讨论】:

  • 啊,是的。对象这个词让我很反感,因为我不习惯参数总是对象,我猜在 Python 中就是这种情况。
  • @Jeroen,确实,everything is an object in Python
【解决方案3】:

这是检查类型是否不匹配或匹配的快速方法:

def my_function(my_word: str):
    if type(my_word) != str:
        raise Exception("Whatever exception you want to raise!")
    pass

【讨论】:

    猜你喜欢
    • 2016-03-03
    • 1970-01-01
    • 2017-10-17
    • 2012-10-16
    • 1970-01-01
    • 2013-01-16
    • 1970-01-01
    • 2018-06-08
    相关资源
    最近更新 更多