SYNTAXERROR

Python SyntaxError の直し方|expected ':'・U+3000 をエラー文から逆引き

expected ':'・U+3000・'(' was never closed など、表示された英語から原因と直し方を引けます。全角文字を探すスクリプトつき。

🎯 対象: SyntaxError で止まった初心者 ⏱️ 読了: 約8分 🧪 実測: Windows 11・Python 3.15.2/3.14.7/3.12.10・IPython 9.16.1・2026-10-30

結論: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章)。

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 + 1invalid syntaxlambda 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+FEFFBOM の文字(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 = 2cannot 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 = 1cannot 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 = """abcunterminated 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 は閉じ忘れ。直す場所は表示より下のことがある

直ったら次はこちら。

📌
参考にした一次情報と検証環境(2026年10月30日実測)

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 です。