[Python-Dev] What does a double coding cookie mean?

Glenn Linderman v+python at g.nevcal.com
Wed Mar 16 02:34:44 EDT 2016

On 3/15/2016 11:07 PM, Chris Angelico wrote:
> On Wed, Mar 16, 2016 at 5:03 PM, Serhiy Storchaka <storchaka at gmail.com> wrote:
>> On 15.03.16 22:30, Guido van Rossum wrote:
>>> I came across a file that had two different coding cookies -- one on
>>> the first line and one on the second. CPython uses the first, but mypy
>>> happens to use the second. I couldn't find anything in the spec or
>>> docs ruling out the second interpretation. Does anyone have a
>>> suggestion (apart from following CPython)?
>>> Reference: https://github.com/python/mypy/issues/1281
>> There is similar question. If a file has two different coding cookies on the
>> same line, what should win? Currently the last cookie wins, in CPython
>> parser, in the tokenize module, in IDLE, and in number of other code. I
>> think this is a bug.
> Why would you ever have two coding cookies in a file? Surely this
> should be either an error, or ill-defined (ie parsers are allowed to
> pick whichever they like, including raising)?
> ChrisA

 From the PEP 263:

> To define a source code encoding, a magic comment must
>     be placed into the source files either as first or second
>     line in the file, such as:

So clearly there is only one magic comment. "either" the first or second 
line, not both.  Both, therefore, should be an error.

 From the PEP 263:

> More precisely, the first or second line must match the regular
>     expression "coding[:=]\s*([-\w.]+)". The first group of this
>     expression is then interpreted as encoding name. If the encoding
>     is unknown to Python, an error is raised during compilation. There
>     must not be any Python statement on the line that contains the
>     encoding declaration.

Clearly the regular expression would only match the first of multiple 
cookies on the same line, so the first one should always win... but 
there should only be one, from the first PEP quote "a magic comment".

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-dev/attachments/20160315/dee29ef5/attachment-0001.html>

More information about the Python-Dev mailing list