Pythonにコメントを挿入するために#
を使用するとき、Pythonはどのようになりますか:
# -*- coding: utf-8 -*-
違う?
はい、コメントでもあります。 Andファイルの先頭の最初の2行にある場合、そのコメントの内容は特別な意味を持ちます。
エンコーディング宣言ドキュメント から:
Pythonスクリプトの1行目または2行目のコメントが正規表現
coding[=:]\s*([-\w.]+)
と一致する場合、このコメントはエンコード宣言として処理されます。この式の最初のグループは、ソースコードファイルのエンコーディングを指定します。エンコーディング宣言は、それ自身の行に現れなければなりません。 2行目である場合、最初の行もコメント専用行である必要があります。
コメントに関する限り、ファイルの読み取りにどのコーデックを使用するかは重要ではありません。 Pythonは通常、#
トークンの後のeverythingを無視し、受け入れられたすべてのソースコードコーデックで#
、エンコード宣言および行区切り文字は、すべてASCIIのスーパーセットであるため、まったく同じようにエンコードされます。したがって、パーサーが行う必要があるのは、1行読み取り、コメント内の特別なテキストをスキャンし、必要に応じて別のテキストを読み取り、コメントをスキャンし、指定されたコーデックに従ってデータを読み取るようにパーサーを構成することです。
コメントがファイルの1行目または2行目である必要がある場合(2行目である場合、1行目もコメントである必要があります)、これは完全に安全です。設定されたコーデックは、とにかく非コメント行。
Pythonリファレンスマニュアルの エンコード宣言 を参照してください。
commentPythonスクリプトの[1行目または2行目が正規表現
coding[=:]\s*([-\w.]+)
、このcommentはエンコード宣言として処理されます。この式の最初のグループは、ソースコードファイルのエンコーディングを指定します。
(エンファシス鉱山)
そう、それは特別なコメントです。パーサーは、1行目または2行目以外のコメントの場合と同様に、パーサーがそれを試行し、無視しないという点で特別です。たとえば、サンプルファイルdecl.py
の未登録のエンコーディング宣言を考えてみましょう。
# # -*- coding: unknown-encoding -*-
print("foo")
これを試して実行すると、Pythonはそれを試して処理し、失敗して文句を言います。
python decl.py
File "decl.py", line 1
SyntaxError: encoding problem: unknown-encoding