目的
何かと比較できるほどの経験が乏しいですが、
Pythonのエラーメッセージは具体的でわかりやすい
と感じています。
よって、エラーは、ぱっと見るだけでなく、
記載内容をまじめに読むことが、
エラー解決の近道である気がしています。
そんな気持ちを示すための記事です。
... AAA yyy BBB
補足の**... AAA yyy BBB**の意味は、エラーを発生させる要素の順番がまじめに表示
されるという意味で書きました。
あとで示しますが、単純に、
TypeError: unsupported operand type(s) for *: 'generator' and 'float'
みたいな表示のこと(後半部)を指してます。
エラーメッセージの例
ここで示すコードは、エラーメッセージを出すためのコードで、
全く同じような間違いをする可能性があるコードではありません。
繰り返します。エラーメッセージを出さすためのコードです。
(ただし、もう少し、ややこしいコードで、同じエラーが出ているのをみたことはあります。)
エラー1
型に関するエラーのTypeErrorが出るケースです。
コードは、以下です。
def my_range(first=0, last=10, step=1):
number = first
while number < last:
yield number
number += step
ranger = my_range(1, 5)
ranger2 = ranger * 2.0 #<-- エラーを出すための意味不明なコード
for x in ranger:
print(x)
エラー表示は、以下です。
C:\_temp_work\error1>python gen_error1.py
Traceback (most recent call last):
File "gen_error1.py", line 7, in <module>
ranger2 = ranger * 2.0
TypeError: unsupported operand type(s) for *: 'generator' and 'float'
... AAA yyy BBB
という意味で、
'generator' and 'float' に
* を作用させようとしたことが
サポート外であることが、具体的にわかります。
もう少し、ややこしいコードの場合、
'generator'
と
'float'
を、この順でかけているという情報で、
どこがおかしいか(どこが期待はずれの型になっているのかなどが)、おそらく、短時間で気づくと思います。
エラー2
型に関するエラーのTypeErrorが出るケースです。
コードは、以下です。
def my_range(first=0, last=10, step=1):
number = first
while number < last:
yield number
number += step
ranger = my_range(1, 5)
ranger2 = 2.0 * ranger #<-- エラーを出すための意味不明なコード
for x in ranger:
print(x)
エラーの内容は、以下です。
C:\_temp_work\error1>python gen_error2.py
Traceback (most recent call last):
File "gen_error2.py", line 7, in <module>
ranger2 = 2.0 * ranger
TypeError: unsupported operand type(s) for *: 'float' and 'generator'
C:\_temp_work\error1>
... AAA yyy BBB
という意味で、
'float' and 'generator' に
* を作用させようとしたことが
サポート外であることが、具体的にわかります。
'float'
と
'generator'
を、この順でかけているという情報で、
どこがおかしいか(どこが期待はずれの型になっているのかなどが)、おそらく、短時間で気づくと思います。
まとめ
エラーメッセージを構成するつくり上、当然の結果だとも思いますが、わかりやすいと感じたので。。。
関連(本人)
直接はあまり関係ないもの
pythonをストレスなく使う!(generatorに詳しくなる。since1975らしい。)
pythonをストレスなく使う!(Pythonでは、すべてがオブジェクトとして実装されている)
pythonをストレスなく使う!(Pylintに寄り添う)
pythonをストレスなく使う!(ExpressionとStatement)
英語と日本語、両方使ってPythonを丁寧に学ぶ。
今後
コメントなどあれば、お願いします。
勉強します、、、、