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'
値エラーは
組み込みの操作または関数が、型は正しいが値が不適切な引数を受け取ったときに発生します
float
関数は文字列、つまりfloat('5')
をとることができます。float('string')
の値_'string'
_が不適切な(変換できない)文字列であるだけです
一方、
間違った型の引数を渡すと(たとえば、intが期待されるときにリストを渡すと)、TypeErrorが発生します。
したがって、リストをfloatに変換することはできないため、float(['5'])
を試した場合、TypeError
を取得します。
ValueError関数は正しいタイプの値で呼び出されますが、値が不適切です
TypeError:関数が不適切な型の値で呼び出されました
Davidの答えにもう1つポイントを追加したいと思います。
関数に不正なnoの引数を渡すと、TypeErrorも発生する可能性があります。
例えば:
def hello(int x,int y):
pass
hello(12)
TypeErrorも得られます:
hello()に必要な位置引数が1つありません: 'y'