Python でよくあるエラー

リリース: 2020-06-16 15:53:11
転載
3034 人が閲覧しました

Python でよくあるエラー

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) は外部を検索しなくなりましたが、印刷時に変数に値が割り当てられていないため、UnboundLocalError

11 が発生します。 auto-increment " " auto-decrement "--"

spam = 0
spam++
ログイン後にコピー
あはは、Python には自動インクリメント演算子と自己デクリメント演算子がありません。C または Java から転送する場合は注意が必要です。 " " の代わりに " = " を使用できます。

#method1 は Foo クラスのメンバー メソッドです。このメソッドはパラメーターを受け入れません。a.method1() の呼び出しは Foo.method1(a) の呼び出しと同等ですが、 Method1 はパラメーターを受け入れないため、エラーが報告されます。正しい呼び出しメソッドは Foo.method1() である必要があります。

さらに関連する知識については、

Python ビデオ チュートリアル

を参照してください。

以上がPython でよくあるエラーの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:juejin.im
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート