Python でよくある間違い:
0. if、elif、else、for、while、class、def ステートメントにコロン
を書き忘れる":"
if spam == 42 print('Hello!')
を追加し忘れると、SyntaxError: 無効な構文
2 が発生します。間違ったインデントの使用
Python はコード ブロックを区別するためにインデントを使用します。よくある間違った使用法:
print('Hello!') print('Howdy!')
原因: IndentationError: 予期しないインデントです。同じコード ブロック内のコードの各行は、一貫したインデントを維持する必要があります。
if spam == 42: print('Hello!') print('Howdy!')
原因: IndentationError: unindent は、どの外側のインデント レベルにも一致しません。コード ブロックが終了すると、インデントは元の位置に戻ります
if spam == 42: print('Hello!')
結果: IndentationError: インデントされたブロックが期待されます。「:」の後にインデントが続く必要があります
3。変数は次のとおりです。定義されていません
if spam == 42: print('Hello!')
結果: NameError: name 'spam' が定義されていません
4. リスト要素のインデックス位置を取得するとき、len メソッドを呼び出すのを忘れてください
インデックス位置から要素を取得する場合、len 関数を使用して要素を取得することを忘れてください。 リストの長さ。
spam = ['cat', 'dog', 'mouse'] for i in range(spam): print(spam[i])
結果: TypeError: range() integer end argument Expected, got list.
正しいアプローチは次のとおりです:
spam = ['cat', 'dog', 'mouse'] for i in range(len(spam)): print(spam[i])
もちろん、より Python 的な方法は enumerate# を使用することです。 ##
spam = ['cat', 'dog', 'mouse'] for i, item in enumerate(spam): print(i, item)5. 文字列の変更文字列は、インデックスによる要素の取得をサポートするシーケンス オブジェクトですが、リスト オブジェクトとは異なります。文字列は不変オブジェクトであり、変更はサポートされていません。
spam = 'I have a pet cat.' spam[13] = 'r' print(spam)結果: TypeError: 'str' object doesn't support item assigns正しいアプローチは次のとおりです:
spam = 'I have a pet cat.' spam = spam[:13] + 'r' + spam[14:] print(spam)6. 文字列と文字列以外の連結
num_eggs = 12 print('I have ' + num_eggs + ' eggs.')結果: TypeError: 'str' オブジェクトと 'int' オブジェクトを連結できません文字列が非文字列に接続されている場合、非文字列オブジェクトは強制的に文字列型に変換する必要があります
num_eggs = 12 print('I have ' + str(num_eggs) + ' eggs.')または、文字列
num_eggs = 12 print('I have %s eggs.' % (num_eggs))7 の書式設定形式を使用します。間違ったインデックス位置
spam = ['cat', 'dog', 'mouse'] print(spam[3])を使用すると、次の結果が発生します: IndexError: リスト インデックスが範囲外です list オブジェクト インデックスは 0 から始まり、3 番目の要素には spam[2]8 を使用してアクセスする必要があります。辞書内に存在しないキーを使用する
spam = {'cat': 'Zophie', 'dog': 'Basil', 'mouse': 'Whiskers'} print('The name of my pet zebra is ' + spam['zebra'])辞書オブジェクト内のキーにアクセスするには[ ] を使用できますが、キーが存在しない場合は次の結果になります: KeyError: 'zebra'正しい方法は get メソッドを使用することです
spam = {'cat': 'Zophie', 'dog': 'Basil', 'mouse': 'Whiskers'} print('The name of my pet zebra is ' + spam.get('zebra'))Whenキーが存在しないため、get はデフォルトで None を返します
9. キーワードを変数名として使用すると、
class = 'algebra'結果: 構文エラー: 無効な構文キーワードの使用は許可されませんPython の変数名として。 Python3 には合計 33 個のキーワードがあります。
>>> import keyword >>> print(keyword.kwlist) ['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']10. 関数内のローカル変数は代入前に使用されます
someVar = 42 def myFunction(): print(someVar) someVar = 100 myFunction()結果は次のようになります: UnboundLocalError: 割り当て前にローカル変数 'someVar' が参照されましたグローバル変数がある場合関数内の変数 ドメイン内に同名の変数がある場合はLEGB順に検索しますが、関数内のローカルスコープにも同名の変数が定義されている場合は検索しません外部スコープ。 したがって、myFunction 関数で someVar が定義されているため、 print(someVar) は外部を検索しなくなりましたが、印刷時に変数に値が割り当てられていないため、UnboundLocalError11 が発生します。 auto-increment " " auto-decrement "--"
spam = 0 spam++あはは、Python には自動インクリメント演算子と自己デクリメント演算子がありません。C または Java から転送する場合は注意が必要です。 " " の代わりに " = " を使用できます。
#method1 は Foo クラスのメンバー メソッドです。このメソッドはパラメーターを受け入れません。a.method1() の呼び出しは Foo.method1(a) の呼び出しと同等ですが、 Method1 はパラメーターを受け入れないため、エラーが報告されます。正しい呼び出しメソッドは Foo.method1() である必要があります。
さらに関連する知識については、
Python ビデオ チュートリアル列
を参照してください。以上がPython でよくあるエラーの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。