Python中ValueError与TypeError的区别及float('string')报错疑问
嘿,这个问题问得特别戳中痛点!很多刚接触Python的朋友都会在这俩错误上犯迷糊,我给你唠明白~
TypeError 和 ValueError 的核心区别
先把这俩错误的本质掰清楚:
- TypeError:说白了就是「你给的东西种类完全错了」——函数/方法根本不接受这个类型的参数,连尝试处理的可能性都没有。比如让你用菜刀切西瓜没问题,但让你用菜刀切空气,你根本不知道从哪下手,这就是TypeError的场景。
- ValueError:这是「东西种类对,但内容不行」——参数的类型是函数允许的,但这个具体的值不符合要求,函数没法把它转换成需要的结果。比如同样用菜刀切西瓜,你拿了个生得像石头的西瓜,菜刀切不动,这就是ValueError的情况。
用例子帮你理解
先看TypeError的典型场景:
比如float()函数只接受字符串或者数字类型的参数,如果你传个列表进去,它完全不知道怎么处理列表这种类型,直接就报错TypeError:
float([1, 2, 3]) # 报错内容:TypeError: float() argument must be a string or a real number, not 'list'
再看你问的float('string')为什么是ValueError:
因为float()函数是接受字符串类型参数的!比如float('123.45')就能正常转换成123.45,说明字符串这个类型是符合要求的。但你传的'string'这个字符串,它的内容没办法被解析成浮点数,属于「类型对,但值不合法」,所以触发的是ValueError,对应的报错信息也说得很明白:
ValueError: could not convert string to float: 'string'
翻译过来就是「没法把这个特定的字符串转换成浮点数」,重点是字符串类型本身是允许的,只是这个值不行。
再举个类似的例子:int('abc')也是ValueError(字符串类型合法,但内容转不成整数),而int({'a':1})就是TypeError(字典类型根本不被int函数接受)。
内容的提问来源于stack exchange,提问作者thileepan
相关产品推荐
相关产品推荐

