簡體   English   中英

我在使用“import module [...] module.x”時遇到錯誤,但在使用“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 表單使用了一個稍微復雜的過程:

  1. 找到 from 子句中指定的模塊,必要時加載並初始化它;
  2. 對於導入子句中指定的每個標識符:
    1. 檢查導入的模塊是否具有該名稱的屬性
    2. 如果不是,則嘗試導入具有該名稱的子模塊,然后再次檢查導入的模塊的該屬性

ImagePIL的子模塊。 在您的第一個表單中, 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM