为什么模块名中的连字符会导致语法错误?

5 投票
4 回答
4529 浏览
提问于 2025-04-17 11:57

我在使用 Python 2.6 时,导入一个模块时遇到了以下问题:

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

这是为什么呢?Python 的风格指南似乎没有提到在名称中使用连字符,但却建议使用下划线。

艾伦

4 个回答

6

在Python中,字符 - 是一个运算符,所以你不能把它用在变量名里。

详细信息可以查看 Python v2.7.2 文档中的词法分析

8

标识符不能包含连字符。这不是风格问题,而是语言语法的一部分,具体可以参考 这个链接

标识符(也叫名字)是通过以下的词法定义来描述的:

identifier ::=  (letter|"_") (letter | digit | "_")*
letter     ::=  lowercase | uppercase
lowercase  ::=  "a"..."z"
uppercase  ::=  "A"..."Z"
digit      ::=  "0"..."9"
16

根据这个链接,任何标识符(也就是变量名、函数名等)必须以字母(大写或小写)或下划线开头,并且可以包含字母、数字或下划线

包名也是标识符,所以它们也得遵循这些规则。

另外,nmea-uploader这个名字可能还意味着从nmea中减去uploader。因为在Python文件中的任何地方都可以导入一个包,如果你提前定义了nmeauploader这两个变量,解释器就会搞不清楚,如果允许用连字符来命名标识符的话,会造成混淆。

撰写回答