- Python
SyntaxError: invalid characterの直し方|全角スペース
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期連続の黒字決算。