Python SyntaxError の直し方|expected ':'・U+3000 をエラー文から逆引き
expected ':'・U+3000・'(' was never closed など、表示された英語から原因と直し方を引けます。全角文字を探すスクリプトつき。
結論:SyntaxError は、表示された英語で原因を絞れます。下の表で同じ文を探し、矢印 ^ の位置を直してください。
1. 結論:メッセージ別の早見表
| エラー文 | 原因 | 直し方 |
|---|---|---|
expected ':' | 行末のコロン抜け | 半角 : を足す |
invalid non-printable character U+3000 | 全角スペース | 半角スペースにする |
invalid character '(' (U+FF08) | 全角の記号 | 半角で打ち直す |
invalid syntax. Maybe you meant '==' or ':=' instead of '='? | 条件の中の = | == にする |
cannot assign to literal here... | 5 = x など、左辺が変数でない | 左右を直す |
'(' was never closed | 括弧の閉じ忘れ | 矢印の括弧を閉じる |
incomplete input | セル実行での閉じ忘れなど | 閉じる・中身を書く |
invalid syntax. Perhaps you forgot a comma? | カンマ抜け(コロン抜けでも出る) | , か : を足す |
invalid syntax(ヒントなし) | 同じ行に続けた、and の後の = など | 2章・5章の例と比べる |
早見表の incomplete input 以外のエラー文は Windows 11 の Python 3.15.2・3.14.7・3.12.10 で実行し、最終行は3版で一致しました。本文の矢印は 3.14.7 の表示です。incomplete input は実行のしかたと版で表示が変わります(6章)。
- 1. 結論:メッセージ別の早見表
- 2. SyntaxError: expected ':'
- 3. invalid non-printable character U+3000
- 4. invalid character '(' (U+FF08)
- 5. Maybe you meant '==' or ':=' instead of '='?
- 6. '(' was never closed と incomplete input
- 7. Perhaps you forgot a comma?
- 8. 全角文字を探すスクリプト
- 9. 表示された行に間違いが無いとき
- 10. よくある質問(FAQ)
- 11. まとめ
2. SyntaxError: expected ':' の直し方
if の行末にコロンがありません。else・for・while・def・class・try・except・with でも同じ表示でした。矢印は行末を指します。
File "C:\...\main.py", line 2
if x > 0
^
SyntaxError: expected ':'
if x > 0: と半角で足せば通ります。else if x < 0: も同じメッセージです。Python では elif x < 0: と書きます。
コロン忘れでも expected ':' が出ず invalid syntax になる例
コロンの問題でも、次の3つは別のメッセージになりました。
| コード | 表示 | 原因 |
|---|---|---|
if x > 0: | invalid character ':' (U+FF1A) | 全角コロン |
if x > 0 print(x) | invalid syntax | コロンなしで同じ行に続けた |
lambda x x + 1 | invalid syntax | lambda x: x + 1 のコロン抜け |
invalid syntax の2つでは、矢印は行末ではなく続けて書いた語を指します。ヒントが無い invalid syntax は、まず矢印の直前にコロンが抜けていないかを見てください。
if x > 0 print(x)
^^^^^
SyntaxError: invalid syntax
def f: は括弧が先に足りないので expected '(' です。def f(): と書きます。
3. invalid non-printable character U+3000 の直し方
U+3000 は全角スペースです。公式の字句解析で、字句を区切る空白として挙がっているのは半角スペース・タブ・フォームフィードです(公式:字句解析)。行頭・行中・行末のどこでも同じ表示でした。
print(x)
^
SyntaxError: invalid non-printable character U+3000
x = 1
^
SyntaxError: invalid non-printable character U+3000
矢印の位置の文字を半角スペースに置き換えます。空白が要らない場所なら消します。3.15.2 では、この矢印が ^^ になります。
文字列の中とコメントの中の全角スペースはエラーになりません。print(" a") # comment は実行できました。
U+00A0・U+200B・U+FEFF も同じ直し方
| エラー文の末尾 | 文字 |
|---|---|
U+00A0 | ノーブレークスペース |
U+200B | ゼロ幅スペース |
U+FEFF | BOM の文字(2行目以降にあるとき) |
U+200B と U+FEFF は、3.15.2 では矢印が出ませんでした。見つからないときは8章のスクリプトで行と位置を出してください。ファイルを読むときの BOM の扱いはUnicodeDecodeError の記事にあります。
4. invalid character '(' (U+FF08) の直し方
全角などの記号が原因です。日本語入力のまま打つと入ります。矢印の文字を半角で打ち直します。
print("a")
^
SyntaxError: invalid character '(' (U+FF08)
3.15.2 では矢印が ^^ になります(カーブした引用符は ^ のまま)。括弧の中の U+.... を次の表で引いてください。
| 表示 | 文字 | 半角 |
|---|---|---|
'(' (U+FF08)/')' (U+FF09) | 全角の丸括弧 | ( ) |
':' (U+FF1A) | 全角コロン | : |
'=' (U+FF1D) | 全角イコール | = |
',' (U+FF0C)/'、' (U+3001) | 全角カンマ・読点 | , |
'"' (U+FF02)/'“' (U+201C) | 全角・カーブした二重引用符 | " |
'‘' (U+2018) | カーブした一重引用符 | ' |
'1' (U+FF11) | 全角数字 | 1 |
'+' (U+FF0B) | 全角プラス | + |
表示されるのは最初の1か所だけです。print("a") の次の行に x = 1 を置いても、出たのは U+FF08 だけでした。1つ直すたびに実行するか、スクリプトでまとめて探してください。
5. invalid syntax. Maybe you meant '==' or ':=' instead of '='? の直し方
条件の中で、比較の == ではなく代入の = を書いています。if x = 1:・while x = 1:・elif x = 2:・if x = True: で出ました。
if x = 1:
^^^^^
SyntaxError: invalid syntax. Maybe you meant '==' or ':=' instead of '='?
値を比べるだけなら if x == 1: です。:= は式の中で代入する別の書き方です(公式:代入式)。
同じ間違いでもヒントが出ないことがあります。and の後ろに = を書くと、ただの invalid syntax でした。
if x == 1 and y = 2:
^
SyntaxError: invalid syntax
cannot assign to ... here も同じ仲間
左辺が変数以外のときの表示です。
| コード | 表示 |
|---|---|
5 = x・"a" = x・if 1 = x: | cannot assign to literal here. Maybe you meant '==' instead of '='? |
f() = 1・if f() = 1: | cannot assign to function call here. Maybe you meant '==' instead of '='? |
a + 1 = 2 | cannot assign to expression here. Maybe you meant '==' instead of '='? |
if A.v = 1: | cannot assign to attribute here. Maybe you meant '==' instead of '='? |
if a[0] = 1: | cannot assign to subscript here. Maybe you meant '==' instead of '='? |
None = 1 | cannot assign to None |
print(a.b=1) | expression cannot contain assignment, perhaps you meant "=="? |
if の中なら == にします。代入のつもりなら x = 5 のように、変数を左に書きます。
6. '(' was never closed と incomplete input の直し方
どちらも閉じ忘れで出ます。
SyntaxError: '(' was never closed
print("hello"
^
SyntaxError: '(' was never closed
矢印は閉じていない括弧そのものを指します。[1, 2, は '[' was never closed、{"a": 1, は '{' was never closed です。括弧の位置を示す動きは Python 3.10 からです(公式:What's New 3.10)。
形が似ている別のメッセージです。
| コード | 表示 |
|---|---|
print([1, 2) | closing parenthesis ')' does not match opening parenthesis '[' |
print(1)) | unmatched ')' |
print("hello) | unterminated string literal (detected at line 1) |
x = """abc | unterminated triple-quoted string literal (detected at line 1) |
SyntaxError: incomplete input・_IncompleteInputError
Jupyter や Colab のセルで incomplete input が出たら、まず閉じ忘れを探してください。同じ print("hello" でも、実行のしかたで表示が変わります。
| 実行のしかた | 表示 |
|---|---|
python main.py(3版) | SyntaxError: '(' was never closed |
| IPython のセル(Python 3.12.10+IPython 9.16.1) | SyntaxError: incomplete input |
| IPython のセル(Python 3.14.7+IPython 9.16.1) | _IncompleteInputError: incomplete input |
入力途中を許すフラグ付きの compile()(3.12.10) | SyntaxError: incomplete input |
同じ compile()(3.14.7・3.15.2) | _IncompleteInputError: incomplete input |
IPython は2026年10月30日に 3.14.7 と 3.12.10 で実行しました(3.15.2 は未実行)。3.12.10 の結果はエラー辞典と同じです。現行の Jupyter・Colab そのものでは試していません。
compile() と IPython のセルでは、次の4つすべてが incomplete input でした。
print("hello" # 丸括弧を閉じていない
x = [1, 2, # 角括弧を閉じていない
x = """abc # 三重クォートを閉じていない
if True: # コロンの後に中身がない
3.14.7・3.15.2 の _IncompleteInputError は SyntaxError の子クラスで、原因は同じです。公式の例外一覧には載っていませんでした(2026年10月30日時点)。名前が _ で始まる非公開扱いのクラスで、版によって変わる可能性があります。IPython 9.16.1 のセルでも、Python 3.14.7 ではこの名前で表示されました。Jupyter・Colab の画面にこの名前が出るかは確認できていません。
7. invalid syntax. Perhaps you forgot a comma? の直し方
括弧の中で、値が区切られずに並んでいます。矢印の範囲の間にカンマを足します。
a = [1 2 3]
^^^
SyntaxError: invalid syntax. Perhaps you forgot a comma?
print("a" 1)・print(x x)・{"a": 1 "b": 2}・["a" "b" 1] も同じ表示でした。
辞書のコロン忘れでも、この表示です。{"a" 1} に足すのはカンマではなく、{"a": 1} のコロンです。
文字列だけのカンマ抜けはエラーになりません。次のコードは ['ab'] と表示されました。隣り合う文字列は1つに連結されるためです(公式:文字列リテラルの連結)。要素数がおかしいときは、ここを見てください。
lst = [
"a"
"b"
]
print(lst) # ['ab']
8. 全角文字を探すスクリプト
見えない文字も、行と位置とコードポイントで出せます。find_chars.py などの名前で保存し、調べるファイルを渡します。
import sys
import unicodedata
path = sys.argv[1]
with open(path, encoding="utf-8") as f:
for lineno, line in enumerate(f, 1):
for col, ch in enumerate(line, 1):
if ord(ch) > 0x7E:
name = unicodedata.name(ch, "名前なし")
print(f"{lineno}行 {col}文字目: U+{ord(ch):04X} {name}")
python find_chars.py main.py
全角スペースなどを入れた検体の結果です(3版で動作確認)。
2行 1文字目: U+3000 IDEOGRAPHIC SPACE
3行 6文字目: U+FF08 FULLWIDTH LEFT PARENTHESIS
4行 4文字目: U+00A0 NO-BREAK SPACE
5行 6文字目: U+200B ZERO WIDTH SPACE
- 文字列やコメントの日本語も全部出ます。それらはエラーの原因ではありません
- cp932 で保存したファイルは
UnicodeDecodeErrorで読めません(直し方)
9. 表示された行に間違いが無いとき
閉じ忘れは直す場所が表示より下にあります。次の例は } の閉じ忘れです。
d = {"a": 1,
"b": 2
print(d)
File "C:\...\main.py", line 1
d = {"a": 1,
^
SyntaxError: '{' was never closed
} を足す場所は2行目の行末です。見方は次の4つです。
was never closed:矢印の括弧から下へたどり、閉じるはずの場所を探す(detected at line 3):三重クォートの閉じ忘れは、開始の行を矢印で指し、末尾の行番号をこの形で出します。x = """abcの下に2行あると、表示は1行目でdetected at line 3でした- 複数行のカンマ抜け:リストの要素を
1,・2・3,と1行ずつ書き、2のカンマを抜くと、指されるのは2の行です。カンマもその行末に足します expected 'except' or 'finally' block:こちらは逆に、原因より下の行を指す例です。try:・字下げしたx = 1・print(x)の3行では、3行目のprintを指しました。exceptかfinallyはtryの中身の直後に足します
矢印が複数の ^^^ のときは、1点ではなく範囲を指しています(3.15.2 の全角文字の ^^ は1文字分です)。全体の範囲を示す動きも 3.10 からです(公式)。
10. よくある質問(FAQ)
Q. 全角スペースはコメントの中でもエラーになりますか?
なりません。文字列の中とコメントの中は実行できました(3章)。
Q. IndentationError も SyntaxError の仲間ですか?
はい。IndentationError は SyntaxError の子クラスです(公式)。if True: の中身が無いと IndentationError: expected an indented block after 'if' statement on line 1 と出ました。直し方はエラー辞典の IndentationError にあります。
Q. Python の版が違うとメッセージも変わりますか?
変わることがあります。incomplete input は例外の名前が違いました(6章)。閉じ括弧が離れた行にある print("a"・x = 1・y = 2) の3行も違います。3.15.2 と 3.12.10 は invalid syntax. Perhaps you forgot a comma? でした。3.14.7 だけ invalid syntax. Did you mean 'not'? でした。3.15.2 では全角文字を指す矢印も ^^ になります。他の版は試していません。
本記事は、生成AIを活用して下書きし、運営者が内容を確認・編集したうえで公開しています。AIの利用方針は免責事項をご覧ください。
11. まとめ
expected ':'は行末のコロン。全角コロンは別のメッセージになるU+....は全角・不可視の文字。文字列とコメントの中なら問題ないwas never closedとincomplete inputは閉じ忘れ。直す場所は表示より下のことがある
直ったら次はこちら。
- 他のエラーも引く:Pythonエラー辞典のメッセージ別早見表
- 書き方を確かめる:Python基本文法の条件分岐
- 編集環境を整える:VSCode の Python 環境構築
What's New 3.10/字句解析/SyntaxError/unicodedata.name。実測は Windows 11 の Python 3.15.2・3.14.7・3.12.10 です。IPython のセルは Python 3.12.10/3.14.7+IPython 9.16.1 です。