2015-01-02 105 views
9

我有一個叫imtools.py模塊包含以下功能:Python的名稱「OS」,即使它被明確進口沒有定義

import os 

def get_imlist(path): 
    return[os.path.join(path,f) for f in os.listdir(path) if f.endswith('.jpg')] 

當我嘗試使用import imtools調用從控制檯功能get_imlistimtools.get_imlist(path),我收到以下錯誤:

Traceback (most recent call last): 
    File "<input>", line 1, in <module> 
    File "C:\...\PycharmProjects\first\imtools.py", line 5, in get_imlist 
NameError: name 'os' is not defined 

我是新的Python和我必須在這裏失去了一些東西簡單,但不知道這一點。如果我在控制檯上定義了這個功能,它可以正常工作。此模塊腳本的具體歷史記錄如下所示:最初它是在沒有import os語句的情況下編寫的,然後在看到上面的import os語句之前的錯誤已添加到腳本中並重新保存。保存之前和之後使用相同的控制檯會話來運行腳本。

+4

你確定你正在導入這個確切的代碼(而不是,例如,一些沒有'import os'的舊版本)?行號在源代碼和異常消息之間不匹配。 – NPE

+5

是的,@NPE說。如果你編輯'imtools.py'文件,你需要在控制檯重新加載(imtools)'。 –

+2

這裏顯示的代碼沒有問題。 – jgritty

回答

16

基於小提示,我猜測你的代碼最初並沒有import os這行代碼,但是你在源代碼中糾正了這個錯誤並重新導入了這個文件。

問題是Python緩存模塊。如果您不止一次地使用import,則每次獲取相同的模塊時都不會重新讀取。您在進行第一次導入時所犯的錯誤將持續存在。

要編輯後重新導入imtools.py文件,您必須使用reload(imtools)

+1

是的,這是問題所在。我的印象是,每次我在編輯器中保存腳本時,都會照顧到控制檯中加載的所有變量。我認爲只要對像PyCharm這樣的編輯有一個粗略的熟悉,就可以引導我們進行這種思考,至少對我來說是這樣。謝謝。 – Qubit1028

+0

重新運行腳本通常會更好,因爲即使重新加載(降級到3.x中的inspect模塊)也不會可靠地做到自己想做的事(這就是爲什麼它不再是內置的原因)。 –

+0

@TerryJanReedy我知道有些情況下'reload'不是100%可靠的,但是因爲我還沒有碰到一個我從未調查過太多的案例。你如何「重新運行腳本」? –

0

與我同樣的問題我也試圖跟隨由Jan Erik Solem編寫的計算機視覺與Python的書籍[http://programmingcomputervision.com/]。我試圖在互聯網上探索以查看問題,但我沒有找到任何有價值的解決方案,但我已經通過我自己的努力解決了這個問題

首先,你只需要放置「imtools.py」到安裝,如C你的Python的父文件夾:\ Python中,因此文件放置到該目的地和類型以下命令:

from PIL import Image 
from numpy import * 
from imtools import * 

而不是用imtools.get_imlist()輸入代碼你ju ST從這樣的代碼刪除imtools:

get_imlist() 

這可以解決您的問題,因爲我已經發現我用同樣的技術,我的解決方案。

相關問題