web-dev-qa-db-ja.com

pythonのValueErrorおよびTypeError

Python3xのTypeエラーとValueエラーの違いを完全には理解できません。

TypeErrorの代わりにfloat( 'string')を試行すると、なぜValueErrorが発生するのですか? 'str'型の変数を渡してfloatに変換しているので、TypeErrorも発生しませんか?

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'
9
thileepan

値エラーは

組み込みの操作または関数が、型は正しいが値が不適切な引数を受け取ったときに発生します

float関数は文字列、つまりfloat('5')をとることができます。float('string')の値_'string'_が不適切な(変換できない)文字列であるだけです

一方、

間違った型の引数を渡すと(たとえば、intが期待されるときにリストを渡すと)、TypeErrorが発生します。

したがって、リストをfloatに変換することはできないため、float(['5'])を試した場合、TypeErrorを取得します。

引用

17
David

ValueError関数は正しいタイプの値で呼び出されますが、値が不適切です

TypeError:関数が不適切な型の値で呼び出されました

0
Imad77

Davidの答えにもう1つポイントを追加したいと思います。

関数に不正なnoの引数を渡すと、TypeErrorも発生する可能性があります。

例えば:

def hello(int x,int y):
    pass

hello(12)

TypeErrorも得られます:

hello()に必要な位置引数が1つありません: 'y'

0
adi