Python 为什么模块名称中的连字符会产生语法错误?
我使用的是python 2.6,在导入模块时会得到以下信息: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标识符不能包含连字符。这不是风格问题,而是语言语法的一部分,请参见 标识符(也称为名称)由以下词汇定义
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"