Python 为什么模块名称中的连字符会产生语法错误?

Python 为什么模块名称中的连字符会产生语法错误?,python,syntax,Python,Syntax,我使用的是python 2.6,在导入模块时会得到以下信息: File "./test-nmea-uploader.py", line 11 import nmea-uploader as sut ^ SyntaxError: invalid syntax 为什么会这样?python风格指南似乎没有提到在名称中使用连字符,尽管它建议使用下划线 Alan标识符不能包含连字符。这不是风格问题,而是语言语法的一部分,请参见 标识符(也称为名称)由以下词汇定义

我使用的是python 2.6,在导入模块时会得到以下信息:

  File "./test-nmea-uploader.py", line 11
    import nmea-uploader as sut
               ^
SyntaxError: invalid syntax
为什么会这样?python风格指南似乎没有提到在名称中使用连字符,尽管它建议使用下划线


Alan

标识符不能包含连字符。这不是风格问题,而是语言语法的一部分,请参见

标识符(也称为名称)由以下词汇定义描述:


字符
-
是python中的运算符,因此不能在标识符中使用它

请参见。

根据,任何标识符必须以小写/大写字母或下划线开头,并且包含小写/大写字母、数字或下划线

包名称是标识符,因此它们绑定到相同的规则

此外,
nmea上传程序
也可能意味着从
nmea
中减去
uploader
。 由于可以在python文件中的任何位置导入包,因此如果事先定义了变量
nmea
uploader
,那么如果标识符名称允许连字符,解释器就会感到困惑

python风格指南似乎没有提到在名称中使用连字符

因为python样式指南与确定代码中的错误完全无关


样式指南建议您应该使用的样式。要确定您可以使用什么,请查阅语言语法或其他此类文档。

类/变量名称不能包含连字符。我认为这是因为解释器无法区分名称
A-b
和操作
A[减号]b
--它如何知道你是指名为
a-b
的变量还是
a
减去
b
的变量?你可以这样做:
sut=\uu导入('nmea-uploader')
认为……必须以字母或下划线开始回答。进一步说,如果a-b是一个标识符,那么它就不能是减法。在读取
.py
文件时,
python
首先将文件分解为标记,这样做的方式使破折号是完整标记,无论它是在关键字
import
之后还是作为表达式的一部分。
identifier ::=  (letter|"_") (letter | digit | "_")*
letter     ::=  lowercase | uppercase
lowercase  ::=  "a"..."z"
uppercase  ::=  "A"..."Z"
digit      ::=  "0"..."9"