Почему дефисы в именах модулей генерируют синтаксическую ошибку? - PullRequest
4 голосов
/ 30 января 2012

Я использую Python 2.6 и получаю следующее при импорте модуля:

  File "./test-nmea-uploader.py", line 11
    import nmea-uploader as sut
               ^
SyntaxError: invalid syntax

Почему это так? Руководство по стилю Python, похоже, не упоминает об использовании дефисов в именах, хотя и предлагает использовать подчеркивание.

Alan

Ответы [ 4 ]

14 голосов
/ 30 января 2012

В соответствии с http://docs.python.org/reference/lexical_analysis.html#identifiers, любой идентификатор должен начинаться с строчными / заглавными буквами или подчеркиванием и содержать строчными / прописными буквами, цифрами или подчеркиванием.

Имена пакетов являются идентификаторами, поэтому они привязаны к одним и тем же правилам.

Кроме того, nmea-uploader также может означать вычитание uploader из nmea.Поскольку вы можете импортировать пакет в любое место файла Python, если вы заранее определили переменные nmea и uploader, интерпретатор может запутаться, если для имен идентификаторов будет разрешен дефис.

7 голосов
/ 30 января 2012

Идентификаторы не могут содержать дефисы.Это не вопрос стиля, а часть синтаксиса языка, см. http://docs.python.org/reference/lexical_analysis.html#identifiers

Идентификаторы (также называемые именами) описываются следующими лексическими определениями:

identifier ::=  (letter|"_") (letter | digit | "_")*
letter     ::=  lowercase | uppercase
lowercase  ::=  "a"..."z"
uppercase  ::=  "A"..."Z"
digit      ::=  "0"..."9"
5 голосов
/ 30 января 2012

Символ - является оператором в python, поэтому его нельзя использовать в идентификаторе.

См. Лексический анализ - документация по Python v2.7.2 .

3 голосов
/ 30 января 2012

Руководство по стилю Python, похоже, не упоминает об использовании дефисов в именах

Поскольку руководство по стилю Python совершенно не имеет отношения к определению ошибка в вашем коде или нет.

Руководство по стилю предлагает то, что вы должны использовать.Чтобы определить, что вы можете использовать, обратитесь к грамматике языка или другой подобной документации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...