LoginSignup
0
1

More than 3 years have passed since last update.

Pythonのエラーメッセージは具体的でわかりやすい「が」(... AAA yyy BBB)

Last updated at Posted at 2020-02-02

目的

何かと比較できるほどの経験が乏しいですが、
Pythonのエラーメッセージは具体的でわかりやすい
と感じています。
よって、エラーは、ぱっと見るだけでなく、
記載内容をまじめに読むことが、
エラー解決の近道である気がしています。

そんな気持ちを示すための記事です。

... AAA yyy BBB

補足の... AAA yyy BBBの意味は、エラーを発生させる要素の順番がまじめに表示
されるという意味で書きました。

あとで示しますが、単純に、

TypeError: unsupported operand type(s) for *: 'generator' and 'float'

みたいな表示のこと(後半部)を指してます。

エラーメッセージの例

ここで示すコードは、エラーメッセージを出すためのコードで、
全く同じような間違いをする可能性があるコードではありません。
繰り返します。エラーメッセージを出さすためのコードです。
(ただし、もう少し、ややこしいコードで、同じエラーが出ているのをみたことはあります。)

エラー1

型に関するエラーのTypeErrorが出るケースです。

コードは、以下です。

gen_erro1.py
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が出るケースです。

コードは、以下です。

gen_error2.py
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を丁寧に学ぶ。

今後

コメントなどあれば、お願いします。:candy:
勉強します、、、、

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1