2016-11-15 33 views
0

我有名称的模块为“downloadflat-modular.py”,蟒蛇无法导入该模块的Python不接受进口模块名“ - ”

Python 3.4.0 (default, Apr 11 2014, 13:05:11) 
[GCC 4.8.2] on linux 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import downloadflat-modular 
    File "<stdin>", line 1 
    import downloadflat-modular 
        ^
SyntaxError: invalid syntax 
>>> from downloadflat-modular import * 
    File "<stdin>", line 1 
    from downloadflat-modular import * 
        ^
SyntaxError: invalid syntax 
>>> 

这是一个限制?

uname -a 
Linux ubuntu 3.16.0-30-generiC#40~14.04.1-Ubuntu SMP Thu Jan 15 17:43:14 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux 
+0

_这是限制吗?_是的。 Python不能说“downloadflat-modular”就是一个标识符。只要将它改为使用'_'即可。 –

回答

3

包名是标识符,因此它们不能包含连字符。

python中的标识符必须是开头带有小写/大写字母或下划线,并且可以在名称的其余部分包含数字。


根据PEP8建议的风格如下:

https://www.python.org/dev/peps/pep-0008/#package-and-module-names

模块应该是短期的,全小写的名字。如果提高可读性,则可以在模块名称中使用下划线。尽管不建议使用下划线,Python包也应该有简短的全小写名称。

2

这是一种限制,你可以说。

-是减法运算符,所以Python解释downloadflat-modular为“downloadflatmodular”,其中import语句后是不允许的。

基本上,你不能(也不应该)在Python中用-这个符号来命名任何东西。

2

是的,python import只能接受有效的标识符。

的选择是:

  1. 您可以将文件改为downloadflat_modular.py然后import downloadflat_modular
  2. 或者您可以使用importlib.import_module("downloadflat-modular")
+0

虽然第二个选项在我看来很危险......我认为最好避免使用连字符命名模块。 PEP8能接受吗? –

+0

@Rightleg当然不是,它强烈不推荐,但一个可行的选择 – ospider