1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

TravisCIでPythonのテスト時、SyntaxErrorが発生する問題

Posted at

概要

python3.6でTravisCIを使用して、テストを実行した時に謎のSyntaxErrorが発生した問題について説明します。

SyntaxErrorの発生

ローカルの環境でpython3.6unittestを使用してテストコードを書いていました。
もちろんローカルでもテストを定期的に実行していました。
実行方法と実行結果は以下です。

python -Wall -m unittest discover -s aetam/tests

.....
----------------------------------------------------------------------
Ran 5 tests in 0.026s

OK

何も問題はありません。
私の思惑通りです。
ある程度区切りがついたので、コードをGitHubにPUSH!!
そうです。何も問題はなく、テストが無事通ると思っていました。
その時、まさかあんなことになるとは予想もしていませんでした。

pushしたし、次の作業に移ろうとGitHubを漁っていた時でした。
TravisCIからまさかのErroredのメッセージが届きました......!
まさかと思い、TravisCIの管理画面を開きエラーの原因を探しました......。
エラーの記述がありました。以下です。

SyntaxError: Non-ASCII character '\xe9' in file views/login.py on line 37, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details

ASCIIじゃない!!??
そりゃそうですよ!
UTF8ですからね!!
(最近はコメントにもあまり日本語を使わないようにはしてたりするんですが、プロジェクトによって日本語を使ったり、難しくて英語では説明しきれない時など限定的に使用することがあります。日本語を使うなという指摘は受け付けません!)

ここで一つ嫌な予感がしました。
まさか......、古のマジックコードを書かなければいけないとか......?

1: # -*- coding: utf-8 -*-

エラーが出たファイルの1行目に、マジックコード追加してもう一度pushして見ました。
と、通ってしまいました......。
Python2系との互換性のためだったりするのでしょうか?

結論

現状判明している解決方法は3つあります。

  1. マジックコードで文字コードを明示的に指定する。
  2. 英語以外書かない
  3. 別のサービスを使用する

プロジェクトで導入するにあたり簡単な選択は1番です。
ですが私はマジックコードなど書きたくなかったので、すぐにコメントを英語に書き換えました。
なぜなら最近のスタンダードなコーディングルール的にはコーディングルールは書かないのが基本だからです。

どうにかならないものでしょうか......?

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?