python 中的 ValueError 和 TypeError

ValueError and TypeError in python

我不能完全理解 Python3x 中 Type 和 Value 错误的区别。

当我尝试使用 float('string') 而不是 TypeError 时,为什么会出现 ValueError?这不应该也给出 TypeError 因为我正在传递类型 'str' 的变量以转换为 float 吗?

In [169]: float('string')
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-169-f894e176bff2> in <module>()
----> 1 float('string')

ValueError: could not convert string to float: 'string'

值错误是

Raised when a built-in operation or function receives an argument that has the right type but an inappropriate value

float函数可以取一个字符串,即float('5'),只是float('string')中的值'string'是一个不合适的(不可转换的)字符串

另一方面,

Passing arguments of the wrong type (e.g. passing a list when an int is expected) should result in a TypeError

因此,如果您尝试 float(['5']),您将得到 TypeError,因为列表永远无法转换为浮点数。

Cite

ValueError 函数被正确类型的值调用,但值不合适

TypeError : 函数被调用的值类型不当

只想对 David 的回答再补充一点。

TypeError 也可能发生,当我们将不正确的参数传递给函数时。

例如:

def hello(int x,int y):
    pass

hello(12)

这也会给你 TypeError:

hello() 缺少 1 个必需的位置参数:'y'

它们在 Python Documentation.

我会为它们添加示例:

类型错误:

10 + 'a'

值错误:

int("hello")