1. ホーム
  2. python

Pythonの各種実行時エラー(SyntaxError : invalid syntaxなど)。

2022-02-12 16:38:50

Pythonのエラーメッセージの意味を理解しようとすると、少し複雑になることがあります。ここでは、あなたのプログラムをクラッシュさせる可能性のある一般的な実行時エラーのリストを示します。

1) if, elif, else, for, while, class, def文の最後に : (resulting in "SyntaxError: invalid syntax") を追加し忘れること。

以下のようなコードでエラーが発生します。

<テーブル

1

2

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

2) ==の代わりに=を使う(結果として "SyntaxError:無効な構文" が発生する)。

 = は代入演算子、==は等比級数演算子です。などのコードでエラーが発生します。

<テーブル

1

2

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

3) インデントの使い方が間違っている。(結果として "IndentationError: unexpected indent", "IndentationError: unindent does not match any outer indetation level" and "IndentationError: expected an indented block") が発生する.

インデント増加は、: で終わる文の後にのみ使用され、それ以降は以前のインデント形式に戻さなければならないことを忘れないでください。このエラーは、次のようなコードで発生します。

<テーブル

1

2

3

4

5

6

7

8

9

10

11

12

13

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

4) forループ文の中でlen()を呼び出すのを忘れていた(結果は "TypeError: 'list' object cannot be interpreted as an integer" )。

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

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

<テーブル

1

2

3

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

5) 文字列の値を変更しようとした場合(結果は "TypeError: 'str' object does not support item assignment" です)。

文字列は不変のデータ型であり、このエラーは次のようなコードで発生します。

<テーブル

1

2

3

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

そして、実際にこうしたいのですね。

<テーブル

1

2

3

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

6) 文字列でない値を文字列に連結しようとした(結果は "TypeError.となる。Can't convert 'int' object to str implicitly") となる。

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

<テーブル

1

2

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

そして、実際にこうしたいのですね。

<テーブル

1

2

3

4

5

6

7

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

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

7) 文字列の最初と最後に引用符を付けるのを忘れた(結果として "SyntaxError: EOL while scanning string literal" が発生する)。

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

<テーブル

1

2

3

4

5

6

7

8

9

10

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

8) 変数名や関数名のスペルミス("NameError: name 'fooba' is not defined" が発生する。)

このエラーは、次のようなコードで発生します。

<テーブル

1

2

3

4

5

6

7

8

9

10

foobar
=
'Al'
print
(
'My name is '
+
fooba)
or :
spam
=
ruond(
4.2
)
or :
spam
=
Round
(
4.2
)

9) メソッド名のスペルが間違っている ("AttributeError: 'str' object has no attribute 'lowerr'" が発生する)

このエラーは以下のコードで発生します。

<テーブル

1

2

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

10) 参照がリストの最大インデックスを超える(結果として "IndexError: list index out of range" が発生する)。

このエラーは以下のコードで発生します。

<テーブル

1

2

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

11) 存在しない辞書のキー値を使用する (結果: "KeyError: 'spam'")

このエラーは、以下のコードで発生します。

<テーブル

1

2

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

12) Pythonのキーワードを変数名として使おうとしている(結果は "SyntaxError: invalid syntax" )。

Pythonのキーを変数名として使用することはできず、以下のようなコードでエラーが発生します。

<テーブル

1

class
=
'algebra'

Python3のキーワードは、and, as, assert, break, class, continue, def, del, elif, else, except, False, finally, for, global, if, import, in, is, lambda, None , nonlocal, not, or, pass, raise, return, true, try, while, with, yieldです。

13) 定義されたnew変数でvalue-added演算子を使用(結果は "NameError: name 'foobar' is not defined" です)。

0や空文字列を初期値として変数を宣言してはいけません。自己増加演算子を使ったspam += 1という文は、spam = spam + 1と同等であり、spamには有効な初期値の指定が必要であることを意味します。

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

<テーブル

1

2

3

spam
=
0
spam
+
=
42
eggs
+
=
42

14) ローカル変数と同名のグローバル変数が存在する場合、定義する前に関数内でローカル変数を使用する(結果は "UnboundLocalError: local variable 'foobar' referenced before assignment " となる)。

同じ名前のグローバル変数を持つ関数内でローカル変数を使うのは複雑ですが、ルールは「関数内で定義されたものは、その関数の中だけで使われるならローカル、そうでないならグローバル」です。

つまり、定義する前の関数でグローバル変数として使うことはできないのです。

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

<テーブル

1

2

3

4

5

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

someVar
=
100
myFunction()

15) 整数のリストを作成するために range() を使用しようとしています (結果は "TypeError: 'range' object does not support item assignment" です)。

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

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

<テーブル

1

2

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

もしかしたら、これがやりたいことなのかもしれませんね。

<テーブル

1

2

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

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

16) ++や--の自己減算演算子も悪くない。(結果、"SyntaxError: invalid syntax"となる)

C++ , Java , PHP などの他の言語に慣れている方は、++ や -- を使って変数のインクリメントやデクリメントを試してみるとよいでしょう。Pythonにはそのような演算子はありません。

このエラーは、次のようなコードで発生します。

<テーブル

1

2

spam
=
1
spam
+
+

もしかしたら、これがやりたいことかもしれません。

<テーブル

1

2

spam
=
1
spam
+
=
1

17) メソッドの第1引数にself引数を追加するのを忘れた(結果: "TypeError: myMethod() takes no arguments (1 given)")

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

<テーブル

1

2

3

4

5

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

18) 6行目が括弧のペアで表示されないため、次の行に表示されてしまう(結果: "SyntaxError: invalid syntax" )。

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

<テーブル

1

2

3

4

5

def print_time(threadName,delay)。
    カウント = 0
    while count<5:
        time.sleep(delay)
        count+= 1
        print "%s:%s" % (スレッド名, time.ctime(time.time()))
print "メイン開始"

--------------------- この記事は newtonnl の CSDN ブログに掲載されたもので、全文は https://blog.csdn.net/newtonnl/article/details/70792289?utm_source=copy でご覧になれます。