2009-04-17 58 views

回答

114

你應該檢查PEP 8,樣式指南Python代碼:

封裝和模塊名模塊應該是短期的,全小寫的名字。如果提高可讀性,則可以在模塊名稱中使用下劃線。儘管不建議使用下劃線,Python包也應該有簡短的全小寫名稱。

由於模塊名稱映射到文件名,並且某些文件系統不區分大小寫並截斷長名稱,所以重要的是選擇模塊名稱的時間相當短 - 在Unix上這不會成爲問題,但是代碼傳輸到較舊的Mac或Windows版本或DOS時可能會出現問題。

換句話說:重命名文件:

+42

這個問題與風格無關,它是一個_syntax_ _error_ – hop 2009-04-19 00:09:34

+1

如下圖所示,可能仍然有一個帶有這個名字的文件,所以風格指南非常相關。 – 2012-11-19 22:08:53

23

問題是python-code不是標識符。解析器將此視爲python減去code。當然,這不會做你所問的。您將需要使用一個也是有效的Python標識符的文件名。嘗試用下劃線替換-

+1

+1。從來沒有想過Python源代碼的文件名應該是一個有效的標識符,原因**文件名**將用於引用模塊對象。 – andy 2015-04-16 01:51:07

3

你也許可以導入它通過一些黑客__import__,但如果你已經不知道怎麼了,你不應該。 Python模塊名稱應該是有效的變量名稱(「標識符」) - 這意味着如果你有一個模塊foo_bar,你可以在Python中使用它(print foo_bar)。你不能用一個奇怪的名字(print foo-bar - >語法錯誤)這樣做。

91

在代碼中要注意的另一件事是導入不是函數。所以import(python-code)應該是import python-code,正如一些人已經提到的那樣,它被解釋爲「import python minus code」,而不是你想要的。如果你真的需要導入的文件,在其名稱中的破折號,你可以做以下::

python_code = __import__('python-code') 

但是,也如上文提到的,這是不是真的建議。你應該改變文件名,如果它是你控制的東西。

15

TLDR

破折號非法的,但你不應該使用他們的3個原因:

  1. 您需要特殊的語法與破折號導入文件
  2. 沒有人希望模塊名稱與破折號
  3. 這是違反Python Style Guide的建議

如果你一定要導入的文件名以短劃線特殊的語法是這樣的:

module_name = __import__('module-name') 

好奇,爲什麼我們需要特殊的語法?

的原因特殊語法的是,當你寫import somename你創建與標識符somename(所以你可以稍後例如somename.funcname使用它)的模塊對象。當然module-name不是一個有效的標識符,因此是一個有效的特殊語法。

你不明白爲什麼模塊名稱不是有效的標識符?

別擔心 - 我也沒有。這裏有一個提示可以幫助你:看看這條python行:x=var1-var2。你是否看到作業右側的減法或帶有短劃線的變量名?

PS

沒有原來在我的答案,除了包括什麼,我認爲是所有其他的答案信息最相關的位在同一個地方

相關問題