SyntaxError: invalid syntax(if x = 5:)の原因と直し方
条件式の中で = (代入)を使おうとしたときに出るエラーです。比較には == を使います。
エラーメッセージの読み方
File "main.py", line 2
main.py- ファイル名
2- 行番号 — Pythonが構文解析を諦めた位置
SyntaxError- エラークラス — 実行前の構文チェックで検出されました
invalid syntax. Maybe you meant '==' or ':=' instead of '='?- 内容 — 期待していたもの、または見つけられなかったもの
このエラーが出る典型パターン
パターン1
1 x = 5 2 if x = 5: ^ 3 print("yes")
File "main.py", line 2
if x = 5:
^^^^^
SyntaxError: invalid syntax. Maybe you meant '==' or ':=' instead of '='?
=は代入、==は比較です。Pythonでは代入を式の中で使えないため、比較のつもりで=を書くとその場で構文エラーになります。
直し方: = を == にします。
広告
広告スロット(未設定)
パターン2
1 y = 10 2 while y = 0: ^ 3 print(y)
File "main.py", line 2
while y = 0:
^^^^^
SyntaxError: invalid syntax. Maybe you meant '==' or ':=' instead of '='?
whileの条件式でも同じ規則です。構文エラーなので、ループの回数に関わらず実行すら始まりません。
直し方: = を == にします。
パターン3
1 flag = True 2 if flag = False: ^ 3 print("no")
File "main.py", line 2
if flag = False:
^^^^^^^^^^^^
SyntaxError: invalid syntax. Maybe you meant '==' or ':=' instead of '='?
bool型でも同じです。=を使うと値の型に関わらず必ず構文エラーになります。
直し方: = を == にします。
パターン4
1 x = 5 2 if x > 10: 3 print("big") 4 elif x = 5: ^ 5 print("exact")
File "main.py", line 4
elif x = 5:
^^^^^
SyntaxError: invalid syntax. Maybe you meant '==' or ':=' instead of '='?
elifの条件式でも同じ規則です。=を使うと、そこで構文エラーになりifブロック自体が実行されません。
直し方: = を == にします。
パターン5
1 name = "admin" 2 if name = "admin": ^ 3 print("ok")
File "main.py", line 2
if name = "admin":
^^^^^^^^^^^^^^
SyntaxError: invalid syntax. Maybe you meant '==' or ':=' instead of '='?
文字列同士の比較でも同じです。値の型に関わらず、=は比較の位置には使えません。
直し方: = を == にします。
よくある誤解
1文字の書き間違いですが、Pythonは代入を式の中で使えない設計になっているため、その場で構文エラーとして検出されます。C言語のように「代入した値で比較され、意図せず真になる」という事故は起きません。
実務での勘所
「Pythonは式の中で代入を使えない」という説明は、正確には2018年のPython 3.8より前の話です。PEP 572で導入された海象演算子(:=)を使えば、if (n := len(data)) > 10:のように、代入と条件判定を1つの式の中で意図的に行えます。ただし=とは別の記号を新設したのは、既存の=をそのまま条件式で使えるようにするとC言語と同じ事故が起きるためで、「意図して式の中で代入したいときだけ、明示的に別の記号を使う」という設計判断です。