17の一般的なPythonランタイムエラー

(Pythonスキルを向上させるためのスターPython開発者)

転送元:オープンソース中国

www.oschina.net/question/89964_62779

始めたばかりのPython初心者の場合、学習プロセス中にコードを実行すると、多少のエラーが発生しますが、最初は難しいように思われるかもしれません。コードの量が増えるにつれて、練習は完璧になります。ランタイムエラーが発生した場合は、元の問題をすばやく見つけることができます。ここに私があなたを助けることができると思う17のよくある間違いがあります。

1、

if、for、def、elif、else、クラス宣言の最後に追加するのを忘れてください。

次のようにSyntaxError:無効な構文」が発生します。

if spam == 42
  print('Hello!')

2、

==の代わりに=を使用してください。また、「SyntaxError:無効な構文」が発生します。

=は割り当て演算子であり、==は同等の比較操作です。

次のコードでエラーが発生します。

if spam = 42:
  print('Hello!')

3、

インデントの誤った使用により、

IndentationError:予期しないインデント」、

IndentationError:unindentは、どの外部インデテーションレベルとも一致しません

そして「IndentationError:インデントされたブロックが必要です

インデントの増加は、:で終わる文の後にのみ使用され、その後、前のインデント形式に復元する必要があることに注意してください。

次のコードでエラーが発生します。

print('Hello!')
  print('Howdy!')

または:

if spam == 42:
  print('Hello!')
print('Howdy!')

4、

forループでlen()を呼び出すのを忘れた

導致「TypeError: 'リスト'オブジェクトを整数として解釈できません

通常、リストまたは文字列の要素をインデックスで反復する必要があります。これには、range()関数を呼び出す必要があります。このリストを返す代わりに、len値を返すことを忘れないでください。

次のコードでエラーが発生します。

spam = ['cat', 'dog', 'mouse']
for i in range(spam):
  print(spam[i])

5、

文字列の値を変更してみてください

導致「TypeError: 'str'オブジェクトはアイテムの割り当てをサポートしていません

文字列は不変のデータタイプです。次のコードでエラーが発生します。

spam = 'I have a pet cat.'
spam[13] = 'r'
print(spam)

正しいアプローチは次のとおりです。

spam = 'I have a pet cat.'
spam = spam[:13] + 'r' + spam[14:]
print(spam)

6、

文字列以外の値を文字列と連結してみてください

導致「TypeError: 'int'オブジェクトを暗黙的にstrに変換できません

次のコードでエラーが発生します。

numEggs = 12
print('I have ' + numEggs + ' eggs.')

正しいアプローチは次のとおりです。

numEggs = 12
print('I have ' + str(numEggs) + ' eggs.')

numEggs = 12
print('I have %s eggs.' % (numEggs))

7、

文字列の最初と最後に引用符を追加するのを忘れた

導致「SyntaxError :文字列リテラルのスキャン中のEOL

次のコードでエラーが発生します。

print(Hello!')

print('Hello!)

myName = 'Al'
print('My name is ' + myName + . How are you?')

8、

スペルミスのある変数または関数名

導致「NameError:name'fooba 'is not defined

次のコードでエラーが発生します。

foobar = 'Al'
print('My name is ' + fooba)

spam = ruond(4.2)

spam = Round(4.2)

9、

メソッド名のつづりが間違っている

導致「AttributeError: 'str'オブジェクトに属性 'lower'がありません

次のコードでエラーが発生します。

spam = 'THIS IS IN LOWERCASE.'
spam = spam.lowerr()

10、

参照がリストの最大インデックスを超えています

導致「IndexError:リストインデックスが範囲外です

次のコードでエラーが発生します。

spam = ['cat', 'dog', 'mouse']
print(spam[6])

11、

存在しない辞書キーを使用する

KeyError: 'spam'」が発生します

次のコードでエラーが発生します。

spam = {'cat': 'Zophie', 'dog': 'Basil', 'mouse': 'Whiskers'}
print('The name of my pet zebra is ' + spam['zebra'])

12、

Pythonキーワードを変数名として使用してみてください

導致「SyntaxError :無効な構文

Pythonキーを変数名として使用することはできません。エラーは次のコードで発生します。

class = 'algebra'

Python3的関連键字有:and、as、assert、break、class、continue、def、del、elif、else、ただし、False、finally、for、from、global、if、import、in、is、lambda、None、 nonlocal、not、or、pass、raise、return、True、try、while、with、yield

13、

新しい変数定義で増分演算子を使用する

導致「NameError:name'foobar 'is not defined

変数を宣言するときは、初期値として0または空の文字列を使用しないでください。このように、増分演算子を使用するspam + = 1の文は、spam = spam + 1と等しくなります。つまり、spamは有効な初期値を指定する必要があります。

次のコードでエラーが発生します。

spam = 0
spam += 42
eggs += 42

14、

ローカル変数を定義する前に、関数でローカル変数を使用します(現時点では、ローカル変数と同じ名前のグローバル変数があります)。その結果、「UnboundLocalError:割り当て前に参照されるローカル変数 'foobar'」になります。

関数でローカル変数を使用することは非常に複雑であり、同時に同じ名前のグローバル変数があります。使用規則は次のとおりです。関数で定義されているものがある場合、関数でのみ使用されている場合はローカル、それ以外の場合はグローバルです。変数。

これは、定義する前に関数のグローバル変数として使用できないことを意味します。

次のコードでエラーが発生します。

someVar = 42
def myFunction():
  print(someVar)
  someVar = 100
myFunction()

15、

range()を使用して整数のリストを作成してみてください。

導致「TypeError: 'range'オブジェクトはアイテムの割り当てをサポートしていません」。

整数の順序付きリストを取得したい場合があるので、range()はこのリストを生成するための良い方法のようです。ただし、range()は実際のリスト値ではなく、「範囲オブジェクト」を返すことを覚えておく必要があります。

次のコードでエラーが発生します。

spam = range(10)
spam[4] = -1

正しい書き方:

spam = list(range(10))
spam[4] = -1

(注:range()はPython 2でリスト値を返すため、spam = range(10)はPython 2で機能しますが、上記のエラーはPython 3で発生します)

16、

++または-インクリメントおよびデクリメント演算子はありません。

導致「SyntaxError :無効な構文

C ++、Java、PHPなどの他の言語に慣れている場合は、++または-変数をインクリメントおよびデクリメントしてみてください。Pythonにはそのような演算子はありません。

次のコードでエラーが発生します。

spam = 1
spam++

正しい書き方:

spam = 1
spam += 1

17、

メソッドの最初のパラメーターにselfパラメーターを追加するのを忘れた

導致「TypeError:myMethod()は引数を取りません(1つ指定)

次のコードでエラーが発生します。

class Foo():
  def myMethod():
      print('Hello!')
a = Foo()
a.myMethod()

(終了)

推奨読書

(タイトルをクリックしてジャンプして読む)

Pythonメモリ割り当ての小さな秘密

Cayleyグラフデータベースの紹介と使用

この記事はあなたに役立つと思いますか?もっと多くの人と共有してください

Pythonスキルを向上させるために主演する「PythonDeveloper」に注意してください

640?wx_fmt = png

良い記事、私は❤️を読んでいます

おすすめ

転載: blog.csdn.net/iodjSVf8U1J7KYc/article/details/100613021