|
Pythonを学ぶ際、エラーメッセージの意味を理解するのは少し複雑です。 ここでは、プログラムがクラッシュする一般的なランタイムエラーのリストを示します。
1) if、elif、else、for、while、class、def def def の最後に :( を追加し忘れました。 エラーは次のようなコードで発生します: if spam == 42 印刷(「こんにちは!」) 2) ==の代わりに使用(「SyntaxError: invalid syntax」) = は割り当て演算子であり、== は比較演算に等しい。このエラーは、次のようなコードで発生します: スパム = 42 の場合: 印刷(「こんにちは!」) 3) インデントの誤った使用。 (その結果、「IndentationError:unexpected indent」「IndentationError:unindent はどの外部インデテーションレベルも一致しない」「IndentationError:expected an indented block」となります) インデントは、以下で終わる文の後にのみ使用されることを覚えておいてください。その後、インデント形式は前のインデント形式に戻す必要があります。 このエラーは、次のようなコードで発生します: 印刷(「こんにちは!」) 印刷(「やあ!」) 又は: if spam == 42: 印刷(「こんにちは!」) 印刷(「やあ!」) 又は: if spam == 42: 印刷(「こんにちは!」) 4) forループ文でlen()を呼び忘れること(「TypeError: "list" object not not ingeger in introger) 通常はリストや文字列要素をインデックス経由で反復処理したいので、range()関数を呼び出す必要があります。 このリストを返すのではなく、lenの値を返すのを忘れないでください。 このエラーは、次のようなコードで発生します: スパム = [「猫」「犬」「マウス」] 範囲内のI(スパム)の場合: 印刷(スパム) 5) 文字列の値を変更しようとする(「TypeError: "str" object does not support item assignment) 文字列は不変データ型であり、エラーは次のようなコードで発生します。 spam = 「私はペットの猫を飼っています。」 spam[13] = "r" 印刷(スパム) そして実際にこうしたいのです: spam = 「私はペットの猫を飼っています。」 スパム = スパム[:13] + "R" + スパム[14:] 印刷(スパム) 6) 文字列以外の値を文字列と連結しようとする(「TypeError: Can"t convert "int" object to str implicly このエラーは、次のようなコードで発生します: 数エッグ = 12 print(「I have " + numEggs + " eggs.") そして実際にこうしたいのです: 数エッグ = 12 print(「I have " + str(numEggs) + " eggs.") 又は: 数エッグ = 12 印刷(「私は%s卵を持っている。」% (numEggs)) 7) 文字列の始まりと末尾に引用符を付け忘れる(「SyntaxError: EOL while scanning String litral」) このエラーは、次のようなコードで発生します:
印刷(こんにちは!) または: 印刷(「こんにちは!」) または: myName = 「アル」 print(「私の名前は」+myName+。 元気?」) 8) 変数名や関数名の綴りミス(「NameError: name "fooba" is not defined ined」)) このエラーは、次のようなコードで発生します: foobar = 「Al」 印刷(「私の名前は」+fooba) または: スパム = ruond(4.2) または: スパム = ラウンド(4.2) 9) メソッド名のスペルミス(「AttributeError: "str" object has no attribute "lowerr" このエラーは、次のようなコードで発生します: SPAM = 「これは小文字です。」 spam = spam.lowerr() 10) 参照がリストの最大インデックスを超えている(「IndexError: list index out of range」となる) このエラーは、次のようなコードで発生します: スパム = [「猫」「犬」「マウス」] print(スパム[6]) 11) 存在しない辞書のキー値を使うこと(「KeyError: 'spam'」が生成される) このエラーは、次のようなコードで発生します: spam = {"cat": "Zophie", "dog": "Basil", "mouse": "Whiskers"} print(「私のペットのシマウマの名前は " + spam["zebra"]です) 12) Pythonキーワードを変数名として使おうとした場合(「SyntaxError: invalid syntax」が発生します) Pythonキーは変数名として使えません。エラーは以下のコードで発生します: クラス = 「代数」 Python3のキーワードは以下の通りです:and、as、assert、break、class、continue、def、del、elif、else、except、False、finally、for、from、global、if、import、in、is、lambda、None、nonlocal、not、or、pass、raise、return、 確かに、試みて、同時に、譲れ
13) 定義された新しい変数に付加価値演算子を使用すること(「NameError: name "foobar" is not defined eded」)が生じる 変数を宣言する際に0やnull文字列を初期値に使わないでください。自己増分演算子を使う文スパム+= 1はスパム=スパム+1と等しくなり、スパムは有効な初期値を指定する必要があります。 このエラーは、次のようなコードで発生します: スパム = 0 スパム += 42 卵 += 42 14) 関数でローカル変数を使い、ローカル変数を定義する前に使うこと(この場合、ローカル変数と同じ名前のグローバル変数が存在する場合)(「UnboundLocalError: local variable "foobar" referenced before assign)が発生します) グローバル変数と同じ名前の関数でローカル変数を使うのは複雑で、使用ルールは次の通りです:関数内で定義されている場合、関数内でのみ使われている場合はローカル変数、その逆も同様です。 つまり、定義するまでは関数内でグローバル変数として使うことはできません。 このエラーは、次のようなコードで発生します: someVar = 42 def myFunction(): print(someVar) someVar = 100 myFunction() 15) range() で整数リストを作成しようとする(「TypeError: "range" object not support item assignment ) 時には整数の順序付きリストを得たい場合、range() がこのリストを生成する良い方法のように思えます。 ただし、range()は実際のリスト値ではなく「range object」を返すことを覚えておく必要があります。 このエラーは、次のようなコードで発生します: スパム = レンジ(10) スパム[4] = -1 もしかしたら、これがあなたのやりたいことかもしれません: スパム = リスト(range(10)) スパム[4] = -1 (注:spam = range(10) はPython 2で動作します。なぜならPython 2ではrange()がリスト値を返すからですが、Python 3では上記のエラーが発生するためです) 16) ++ または -- 自己増分演算子の nice (結果として「SyntaxError: invalid syntax」となります) C++、Java、PHPなど他の言語に慣れているなら、++や変数を増減する方法を試してみるのも良いでしょう。 Pythonにはそのような演算子はありません。 このエラーは、次のようなコードで発生します: スパム = 1 spam++ もしかしたら、それがあなたのやりたいことかもしれません: スパム = 1 スパム += 1 17) メソッドの最初の引数に自己パラメータを追加し忘れたこと(その結果、「TypeError: myMethod() は引数を取らない(1個与えられている)」となります) このエラーは、次のようなコードで発生します: クラスのフー(): def myMethod(): 印刷(「こんにちは!」) a = Foo() a.myMethod()
|