Pythonのエラーについてまとめてみた【タレ方式で更新】

長ったるい前置き

こんにちは、Retroidです。

プログラミングして2年くらいになると、だいぶエラーに対して耐性がつくものです。

昔は、エラー吐くたびにうんざりしていたものですが、最近は「エラー吐くだけまだマシじゃん、エラー吐かないエラーのほうがよっぽど質悪い」って思えるようになりました、ほんとに笑

プログラミングの「エラー」は、医学で言うところの「痛み」なのかな?って思います。

痛みは人間にとって不快なもんですが、無いと困ります。

痛みがなければ、体中にアザができても、手足の骨を折っても気がつくことができず、もっと深刻な事態を招きます。(酒飲んで、翌朝シャワー浴びていると、見慣れないアザがあったりするのは、アルコールで痛覚が麻痺っているからです笑)

エラー吐かないけど挙動のおかしいプログラムを直すのはめんどいです。

話を戻します。

プログラミングを続けていれば、エラーには耐性がつきますが、やっぱり初心者にとってエラーは怖いもの。

ターミナルに、どっさりエラーを示す文章が出てくると、そのたびにビクビクしてしまいますよね。

しかも英語(T_T)

ということで、今回はPythonでよく出るエラーと、その解説を自分なりにまとめてみました。

Python初学者の人、ぜひ見てみてください。

この記事は継ぎ足し継ぎ足し書いていきます

エラーの量って膨大ですし、多分一気に書くのは僕の能力的に無理なので、老舗のうなぎ屋のタレの如く、継ぎ足し継ぎ足しで記事を作っていこうと思います。

それでは本題

SyntaxError: invalid syntax

2019年5月20日記述

「無効な構文」って意味です。ほんとに初歩的なミスで多く出ます。

ほんとに初歩的なので、細かいヒントが書いてないです(笑)

エラー吐いてる行(line ○○って書いてある部分)を1分くらい見つめれば、たいてい原因が見つかるはずです。

それでもわからないなら、根本的に構文が間違っている可能性が高いです。

プライドを捨てて、初級者向けの本で構文を確認してみると、早く解決できると思います。

案外、他の言語でプログラムをちょっと書いた後、Pythonに戻ってくると陥りがちな気がする。。。前の言語の書き方がPythonで通用しなかったりするので(笑)

unexpected EOF while parsing

2019年5月20日記述

EOFとは、End Of Fileのことであり、構文を解析しているときに、ファイルの終わり方が異常だったよ、って言ってる(のだと思う)

例えば、こんなプログラムを書くとエラーが出ます。

これ、2行目をよくよく見てみると、)で閉じられてないんですよね(笑)

大変初歩的なのですが、案外見つけにくいでしょ?

name ‘○○’ is not defined

○○は任意の文字です。

このエラーの意味は「○○って変数、定義されてないので事前に定義してからつかってね(#^ω^)💢」

って意味です。

僕も未だによくやります。。。(笑)

「え、だって定義されてるじゃん?💦」

と思ったそこのあなた、99.999…%あなたが間違ってます(笑)

プログラムはあなたが思っている以上に、ほんと異常なくらい正確です(そして融通が恐ろしいくらい効かない子です)

僕が思いつく限りだと、たいてい

  • 変数の単語、間違ってませんか?(LとRが間違っていたり、単純に内間違えてたり)
  • 単語の大文字と小文字、大丈夫ですか?(プログラムは殆どの場合、大文字と小文字を全く別のものとして扱います)
  • Scope大丈夫?(後述)

のどれかに当てはまることが多いと思います(もちろん、探せばもっとあると思いますが。。。)

最後に書いたやつですが、例えば、Pyhtonでは、関数の中に書いた変数は、関数の外からつかえません。

例を上げて説明しましょう。

関数内でxもyも定義しているのに、xもyもdefineされていないって言ってますね?

これは、xやyが、関数の外からアクセスできないためです。

上の例において、関数のScopeをグローバルスコープといいます。

以下引用です。

Scopeとは、ある名前空間から(直接)アクセスすることができる名前空間の範囲のこと。
Scopeは視野のようなものであり、ある名前空間に立ったとき、そこから見える名前空間はどこまでかということである。

https://qiita.com/Liesegang/items/085f53a13ac140b84202

だから、関数の外からxとか yとかを呼び出そうとしても、「そんなの知らんがな !(#^ω^)💢」って突っ返されるんですね。

今日はここまで!

2019年5月21日

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です