2016-11-15 72 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