ホームページ >データベース >mysql チュートリアル >Python の 17 の一般的なエラーの分析
初めて Python を学習する場合、Python のエラー メッセージの意味を理解するのは少し複雑かもしれません。プログラムのクラッシュを引き起こす可能性のある一般的なランタイム エラーをいくつか紹介します。
1) if 、 elif 、 else 、 for 、 while 、 class 、def ステートメントの最後に追加するのを忘れました: (「SyntaxError: 無効な構文」が発生します)
このエラーは、次のようなコードで発生します:
if spam == 42
print('Hello!')
2) == の代わりに = を使用します (「SyntaxError: 無効な構文」が発生します)
= は代入演算子、== は等価比較演算です。このエラーは次のコードで発生します:
if spam = 42:
print('Hello!')
3) インデントの不正な使用。 (結果として、「IndentationError: 予期しないインデント」、「IndentationError: unindent is not match any external indetation level」、および「IndentationError: Expected an indented block」が発生します)
インデントの増加は、: で終わるステートメントの後、および Must の後にのみ使用されることに注意してください。以前のインデント形式に戻します。このエラーは次のコードで発生します:
print('Hello!')
print('Howdy!')
または:
if spam == 42:
print('Hello !')
print('こんにちは!')
または:
if spam == 42:
print('こんにちは!')
4) for ループでの呼び出しを忘れましたステートメント len() (「TypeError: 'list' オブジェクトを整数として解釈できません」の原因)
通常、インデックスによってリストまたは文字列の要素を反復する必要があり、これには range() 関数を呼び出す必要があります。リストの代わりに len 値を返すようにしてください。
このエラーは次のコードで発生します:
spam = ['cat', 'dog', 'mouse']
for i in range(spam):
print(spam[i])
5)文字列の値を変更しようとしました (「TypeError: 'str' オブジェクトは項目の割り当てをサポートしていません」という結果になります)
string は不変のデータ型であり、次のようなコードでエラーが発生します:
spam = 'I have a pet cat.'
spam[13] = 'r'
print(spam)
そして実際にこれをやりたいのです:
spam = '私はペットの猫を飼っています。'
spam = spam[:13] + 'r' + spam[14:]
print(spam)
6) 文字列以外の値を文字列と連結しようとしました (「TypeError: 'int' オブジェクトを暗黙的に str に変換できません」という結果になります)
このエラーは次のようなコードで発生します:
numEggs = 12
print('I have ' + numEggs + ' Eggs.')
一方、実際にこれを実行したいのは次のとおりです:
numEggs = 12
print( '私は ' + str(numEggs) + ' 卵を持っています。')
or:
numEggs = 12
print('私は %s 個の卵を持っています。' % (numEggs) )
7 ) 文字列の先頭と末尾に引用符を追加するのを忘れました (結果として「SyntaxError: EOL while scan string literal」が発生します)
このエラーは次のコードで発生します:
print(Hello!' )
または:
print('こんにちは!)
または:
myName = 'Al'
print('私の名前は ' + myName +どうやってあなたはいますか?')
8) 変数または関数名のスペルが間違っています (結果として「NameError: name 'foaba' が定義されていません」が発生します)
このエラーは次のコードで発生します:
foobar = 'Al'
print('私の名前は ' + foaba)
または:
spam = ruond(4.2)
または:
spam = Round(4.2)
9)メソッド名のスペルが間違っています (「AttributeError: 'str' object has no attribute ' lowerr'」という結果になります)
次のコードでエラーが発生します:
spam = 'THIS IS IN LOWERCASE.'
spam = spam . lowerr()
10) 参照がリストの最大インデックスを超えています (「IndexError: リスト インデックスが範囲外です」が発生します)
このエラーは次のコードで発生します:
spam = ['cat', 'dog ', 'mouse']
print(spam[6])
11) 存在しない辞書キーを使用します (「KeyError: 'spam'」が発生します)
次のようなコードでエラーが発生します:
spam = {'猫': 'ゾフィー', '犬': 'バジル', 'マウス': 'ひげ'}
print('私のペットのシマウマの名前は ' + spam['zebra'])
12) Python キーワードを変数名として使用しようとしています (「構文エラー: 構文が無効です」が発生します)
Python キーワードは変数名として使用できません。このエラーは次のコードで発生します:
class = 'algebra'
Python3 キーワードは次のとおりです。 : and、as、assert、break、class、 continue、def、del、elif、else、excel、False、finally、for、from、global、if、import、in、is、lambda、None、nonlocal、not、または、pass、raise、return、True、try、while、with、yield
13) 新しい変数定義でインクリメント演算子を使用する (「NameError: name 'foobar' is not generated」が発生する)
変数を宣言するときは、初期値として 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
(注: spam = range(10) は Python 2 では可能です。Python 2 の range() はリスト値を返すためですが、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( 'こんにちは!')
a = Foo()
a.myMethod()