![](/img/trans.png)
[英]Difference between Python's “import X” and “from module import X”?
[英]I'm getting bug when using "import module [...] module.x" but not when using "from module import x". What's the difference?
我有兩個我認為會做同樣事情的代碼,但其中一個給了我一個錯誤,我試圖找出原因。 在此示例中,我使用的是 PIL 模塊,但假設其他模塊也可能發生這種情況:
這很好用:
from PIL import Image
image = Image.open("./x.png")
下面的代碼給我錯誤AttributeError: module 'PIL' has no attribute 'Image'
:
import PIL
image = PIL.Image.open("./x.png")
為什么會這樣? 謝謝!
從文檔中, 導入語句
from 表單使用了一個稍微復雜的過程:
- 找到 from 子句中指定的模塊,必要時加載並初始化它;
- 對於導入子句中指定的每個標識符:
- 檢查導入的模塊是否具有該名稱的屬性
- 如果不是,則嘗試導入具有該名稱的子模塊,然后再次檢查導入的模塊的該屬性
Image
是PIL
的子模塊。 在您的第一個表單中, from PIL import Image
第二步。 Python 找到Image
子模塊並導入。 在您的第二種形式import PIL
中,沒有Image
的導入,因此它是未定義的。
第三種選擇是
import PIL.Image
image = PIL.Image.open("./x.png")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.