pythonをLinuxで実行すると、SyntaxError: Non-ASCII character ... エラーが発生することがあります。
これは日本語対応ができていないのが原因です。.pyファイルの先頭行に1行追加するだけで解決します。
windowsで作成したpythonファイルを、Linuxへアップロードして実行したら、次のようなエラーが発生しました。
SyntaxError: Non-ASCII character '\xe3' in file /●●●/owner.py on line 15, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details
python | 2.7.5(CentOSのプレインストール版) |
CentOS | CentOS Linux release 7.3.1611 (Core) |
日本語に対応していないのが原因
日本語など英語以外の言語や絵文字などの記号の文字列が、コメントや標準出力文字列に含まれるとエラーになります。つまり、.pyファイル内に英語以外の言語が含まれると発生します。
UTF-8で作成した内容でも同じです。PythonはデフォルトでASCIIコードで認識するようになっているから。
さっきは英語以外と言いましたが、正確には『ASCIIコード以外』です。
ASCIIコードは、
American Standard Code for Information Interchange
のことで、半角アルファベットと一部の半角記号、DELなどその他半角コードの32文字です。
1行追加してサクッと修正
.pyファイルの先頭行に次を追加します。
# coding:utf-8
プログラムが複数のファイルで構成されているとき、すべての.pyファイルに書きます。
bashのファイルを作成するときに、
#!/bin/sh
を書くような感覚で必ずつけるものと習慣づけておくと、余計なエラーに時間を取られることはないでしょう。
pythonでASCIIコード以外を使うときは、文字コードの指定が必要。
まとめ
phpやrubyのように、どこかに環境設定で文字コードが指定できないか探してみましたが、pythonにはないようです。
いまは、あたりまえにeclipseなど統合開発環境(IDE)上でソースコードを書いて実行まで行います。
このような環境で実行するとき、IDE内部で自動的に修正して実行している可能性が高く、エラーが発生しないことがあります。
(設定画面で文字コードを指定することが多い。)
実際にぼくの場合、eclipse上では問題なく動いたのにエラーが発生しました。
自動化が進んで便利になると、こういう初歩的なことで時間に取られることがあるんだよなぁ。
楽なものにはあとでとばっちりを食らうことがあることを改めて感じました。