SyntaxError: invalid non-printable character U+3000 は、Python のコードの中に全角スペースが入っているときのエラーです。 invalid character '(' (U+FF08) は全角の括弧です。エラー文の U+ の後ろの番号で、どの文字かが分かります。日本語の入力モードのまま打った、Word・Excel・チャットからコードを貼り付けた、などで混ざります。

エラー文の番号 文字 よくある入り方
U+3000 全角スペース() 日本語入力のままスペースを押した。インデントに混ざる
U+FF08・U+FF09 全角の括弧(( )) 日本語入力のまま括弧を打った
U+FF1A 全角のコロン(:) if ...:・def ...:
U+FF1D 全角のイコール(=)
U+FF11 など 全角の数字(1)
U+201C・U+201D 曲がった引用符(“ ”) Word・メール・チャットから貼り付けた
U+00A0 ノーブレークスペース(見た目は普通の空白) Web ページ・Word から貼り付けた
U+200B 幅ゼロの空白(見えない) Web ページ・チャットから貼り付けた

確認環境:Python 3.8・3.10・3.13(確認日 2026年10月11日)。それぞれの文字を1つだけ混ぜたファイルを実行して確かめました。

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「SyntaxError: invalid characterの直し方|全角スペース」

再現:メッセージと ^ の位置

  File "c1_u3000_indent.py", line 2
      return 1
    ^
SyntaxError: invalid non-printable character U+3000
  File "c3_paren.py", line 1
    print('hi')
         ^
SyntaxError: invalid character '(' (U+FF08)
  File "c7_smartquote.py", line 1
    print(“hi”)
          ^
SyntaxError: invalid character '“' (U+201C)

line 2 が行番号、^ がその文字の位置です。全角スペースは見た目では区別しにくいので、^ の位置と番号を頼りにします。

メッセージの形 文字の種類
invalid non-printable character U+XXXX 空白の仲間(全角スペース・NBSP・幅ゼロの空白)。見えないので、文字そのものは表示されない
invalid character 'X' (U+XXXX) 全角の記号・数字・引用符。文字が表示される

Python の版によってメッセージが違う

混ざった文字 Python 3.8 Python 3.10 Python 3.13
全角の括弧 ( invalid character in identifier invalid character '(' (U+FF08) 同じ
全角スペース(インデント) invalid character in identifier invalid non-printable character U+3000 同じ
数字の後ろの幅ゼロの空白(1​) — invalid decimal literal(原因が分かりにくい) invalid non-printable character U+200B

Python 3.8 以前は、どの文字でも invalid character in identifier と表示されました。以前の版で検索する人が多いメッセージです。3.10 では、幅ゼロの空白が数字の直後にあると invalid decimal literal と表示され、原因の文字が分かりませんでした。

エラーにならない全角もある

場所 結果
文字列の中('こんにちは 世界') エラーにならない(文字列の一部)
コメントの中(# メモ) エラーにならない
変数名・関数名の全角英字(x = 1) エラーにならず、x と同じ名前として扱われる
x = 1          # 全角の x
print(x)        # 1      ← 半角の x として読める
print('全角のprint')   # 全角のprint   ← これも動く

Python は、名前(識別子)を NFKC という形に正規化して読むため、全角の英字は半角と同じ名前になります(Python 公式ドキュメント)。動いてしまうので気づきにくく、検索で見つからない(print で検索しても print は当たらない)など、別の問題の元になります。

見つける方法

コマンドで探す(Linux・Mac)

LC_ALL=C.UTF-8 grep -nP '[\x{3000}\x{00A0}\x{200B}\x{FF01}-\x{FF5E}]' *.py
c1_u3000_indent.py:2:  return 1
c3_paren.py:1:print('hi')
c6_zwsp.py:1:x = 1​
c9_in_string.py:1:print('こんにちは 世界')  # 文字列とコメントの中は OK

FF01〜FF5E は、全角の記号・数字・英字の範囲です。文字列やコメントの中の全角も見つかるので、出た行を見て、コードの部分かどうかを判断します。LC_ALL=C.UTF-8 が無いと、grep が日本語を正しく扱えず character code point value ... is too large というエラーになりました。

Python で、位置と文字の名前を出す

import sys, unicodedata
SUSPECT = {0x3000, 0x00A0, 0x200B, 0xFEFF, 0x201C, 0x201D, 0x2018, 0x2019}
for path in sys.argv[1:]:
    for no, line in enumerate(open(path, encoding="utf-8"), 1):
        for col, ch in enumerate(line, 1):
            cp = ord(ch)
            if cp in SUSPECT or 0xFF01 <= cp <= 0xFF5E:
                print(f"{path}:{no}:{col}: U+{cp:04X} {unicodedata.name(ch, '?')}")
c1_u3000_indent.py:2:1: U+3000 IDEOGRAPHIC SPACE
c1_u3000_indent.py:2:2: U+3000 IDEOGRAPHIC SPACE
c3_paren.py:1:6: U+FF08 FULLWIDTH LEFT PARENTHESIS
c6_zwsp.py:1:6: U+200B ZERO WIDTH SPACE

行・列・文字の名前が出るので、見えない文字(幅ゼロの空白など)も場所を特定できます。

エディタで見えるようにする

エディタ 設定
VS Code 見えない文字・紛らわしい文字を強調する機能(editor.unicodeHighlight の設定)。全角スペースは「空白文字の表示」でも確認できる
ほかのエディタ 「全角スペースを表示する」「空白文字を表示する」の設定を有効にする

直し方

文字 直し方
全角スペース(インデント) 半角スペース4つに打ち直す(タブと混ぜない)
全角の括弧・コロン・イコール・数字 半角で打ち直す
曲がった引用符 “ ” ‘ ’ " ' に打ち直す
NBSP・幅ゼロの空白 削除して、普通の半角スペースを打ち直す(見えないので、上のコマンドで位置を確かめる)

一括置換で全角スペースを半角に変えると、文字列の中の全角スペース('こんにちは 世界')まで変わってしまいます。コマンドで場所を確かめてから、コードの部分だけを直します。

再発を防ぐ

対策 内容
コードを書くときは日本語入力をオフにする 括弧・コロン・スペースは半角入力で
コードの貼り付け元に注意 Word・メール・チャットは引用符や空白を変えることがある。コードブロックからコピーする
エディタの強調表示を有効にする 上の設定

確認の手順(チェックリスト)

順番 確認すること 方法
1 文字の番号 エラー文の U+XXXX(上の表で文字を特定)
2 場所 line N と ^ の位置
3 ほかにも混ざっていないか grep・Python のスクリプトでファイル全体を探す
4 直す 半角で打ち直す。文字列の中は変えない
5 以前の版の Python 3.8 以前は invalid character in identifier と表示される

よくある質問

Q. 日本語の変数名は使えますか。 A. 使えます(金額 = 100 は動きます)。エラーになるのは、全角スペースや全角の記号のように、名前に使えない文字です。ただし、全角英字は半角と同じ名前として扱われるなど紛らわしいため、チームでの開発では英数字の名前が無難です。

Q. IndentationError と出ることもありますか。 A. タブと半角スペースが混ざったときは TabError・IndentationError になります。全角スペースは、インデントに使っても SyntaxError: invalid non-printable character U+3000 でした。

まとめ

  • U+3000 は全角スペース、U+FF08 は全角の括弧。エラー文の番号で文字が分かる
  • non-printable は見えない空白の仲間(全角スペース・NBSP・幅ゼロの空白)
  • Python 3.8 以前は invalid character in identifier、3.10 以降は文字と番号が表示される
  • 文字列・コメントの中はエラーにならない。全角英字の名前は半角と同じ扱いで動いてしまう
  • 見つけるのは grep(LC_ALL=C.UTF-8)か Python のスクリプト。一括置換は文字列まで変えるので避ける

参考・出典

確認日はいずれも 2026年10月11日です。

  • Python 言語リファレンス「Lexical analysis」:https://docs.python.org/3/reference/lexical_analysis.html

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「SyntaxError: invalid characterの直し方|全角スペース」

株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。

WE ARE HIRING

RJCで一緒に開発しながら、
成長を楽しみませんか?

RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!

  • 127日年間休日
  • 12時間平均残業時間
  • 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!

ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。

ABOUT RJC RJCがどんな会社か知る 考え方、研修、働き方、福利厚生、社員の前職まで。RJCのことが丸わかり! RJC丸わかりページへ JOB DESCRIPTION 仕事内容・待遇を見てみる 仕事内容、給与・待遇、選考の流れ。経験者も未経験も!応募前に知りたいこと、まとめました! 募集要項を見る ENTRY エントリーする エントリーは1〜2分・履歴書不要です。まずは話を聞いてみたい、という方でも歓迎です! エントリーフォームへ

RJCで一緒に開発しながら、 成長を楽しみませんか?