ホームページ > バックエンド開発 > Python チュートリアル > Python 初心者がよく遭遇する 17 のエラーの分析

Python 初心者がよく遭遇する 17 のエラーの分析

WBOY
リリース: 2016-06-16 08:43:03
オリジナル
1266 人が閲覧しました

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」が発生します)

インデントの増加は: で終わるステートメントの後にのみ使用され、その後は以前のインデント形式を復元する必要があることに注意してください。次のコードでエラーが発生します:

print('Hello!')
  print('Howdy!')
 
或者:
 
if spam== 42:
  print('Hello!')
 print('Howdy!')
 
或者:
 
if spam== 42:
print('Hello!')
ログイン後にコピー

4) for ループ ステートメントで len() を呼び出すのを忘れました (「TypeError: 'list' オブジェクトを整数として解釈できません」という結果になります)

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

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

spam= ['cat','dog','mouse']
for iin range(spam):
  print(spam[i])
ログイン後にコピー

5) 文字列の値を変更してみます (「TypeError: 'str' オブジェクトは項目の割り当てをサポートしていません」という結果になります)
string は不変のデータ型です。このエラーは次のコードで発生します:

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 while scan string literal」が発生します)
次のコードでエラーが発生します:

print(Hello!')
 
或者:
 
print('Hello!)
 
或者:
 
myName= 'Al'
print('My name is ' + myName+ . How are you?')
ログイン後にコピー

8) 変数または関数名のスペルが間違っています (「名前エラー: 名前 'foaba' が定義されていません」という結果になります)

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

foobar= 'Al'
print('My name is ' + fooba)
 
或者:
 
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= {'cat':'Zophie','dog':'Basil','mouse':'Whiskers'}
print('The name of my pet zebra is ' + spam['zebra'])
ログイン後にコピー

12) 変数名として Python キーワードを使用してみてください (「SyntaxError: 無効な構文」が発生します)

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

クラス = '代数'
Python3 のキーワードは、and、as、assert、break、class、 continue、def、del、elif、else、excel、False、finally、for、from、global、if、import、in、is、lambda、None、非ローカル、not、or、pass、raise、return、True、try、while、with、yield

13) 定義された新しい変数でインクリメント演算子を使用する (「NameError: 名前 'foobar' が定義されていません」という結果になります)

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

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

spam= 0
spam+= 42
eggs+= 42
ログイン後にコピー

14) ローカル変数を定義する前に関数内でローカル変数を使用します (ローカル変数と同じ名前のグローバル変数があります) (結果として「UnboundLocalError: local variable 'foobar' Referenced before assigning」が発生します)

同じ名前のグローバル変数がある場合、関数内でローカル変数を使用するのは非常に複雑です。使用規則は、関数内で何かが定義されている場合、関数内でのみ使用される場合です。その反対はグローバル変数です。

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

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

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 では range() がリスト値を返すため機能しますが、Python 3 では上記のエラーが発生します)

16) 良いアイデアは、++ または -- インクリメント演算子とデクリメント演算子です。 (「SyntaxError: 無効な構文」が発生します)

如果你习惯于例如 C++ , Java , PHP 等其他的语言,也许你会想要尝试使用 ++ 或者 -- 自增自减一个变量。在Python中是没有这样的操作符的。

该错误发生在如下代码中:

spam= 1
spam++
ログイン後にコピー

也许这才是你想做的:

spam= 1
spam+= 1
ログイン後にコピー

17)忘记为方法的第一个参数添加self参数(导致“TypeError: myMethod() takes no arguments (1 given)”)

该错误发生在如下代码中:

class Foo():
  def myMethod():
    print('Hello!')
a= Foo()
a.myMethod()
ログイン後にコピー

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