簡體   English   中英

如何修復 PyDev“來自導入的未定義變量”錯誤?

[英]How do I fix PyDev “Undefined variable from import” errors?

我有一個在 Eclipse 中使用 PyDev 的 Python 項目,而 PyDev 不斷為我的代碼生成錯誤的錯誤。 我有一個定義settings對象的模塊settings 我在模塊b導入它並分配一個屬性:

from settings import settings
settings.main = object()

在我的一些代碼中——但不是全部,語句如下:

from settings import settings
print settings.main 

...在 Eclipse 代碼錯誤窗格中生成“未定義的變量 from import: main”消息,即使代碼運行沒有問題。 我該如何糾正這些?

對於項目中的代碼,唯一的方法是添加一個聲明,說明您期望——可能受if False保護,因此它不會執行(靜態代碼分析只看到您看到的內容,而不是運行時信息——如果你自己打開那個模塊,你就沒有跡象表明 main 是預期的)。

為了克服這個問題,有一些選擇:

  1. 如果它是某個外部模塊,則可以將其添加到forced builtins模塊中,以便 PyDev 為其生成一個 shell 以獲取運行時信息(有關詳細信息,請參見http://pydev.org/manual_101_interpreter.html)——即:主要是, PyDev 將在 shell 中導入模塊並對模塊中找到的類執行dir(module)dir以顯示完成並進行代碼分析。

  2. 您可以在包含錯誤的行中使用 Ctrl+1(對於 Mac 為 Cmd+1),PyDev 會為您提供添加注釋以忽略該錯誤的選項。

  3. 可以創建一個stub模塊並將其添加到predefined完成中( http://pydev.org/manual_101_interpreter.html也有詳細信息)。

我正在使用依賴於二進制文件等的 opencv,所以我有腳本,其中每一行都有這個愚蠢的錯誤。 Python 是一種動態語言,因此不應將此類情況視為錯誤。

我通過以下方式完全刪除了這些錯誤:

窗口 -> 首選項 -> PyDev -> 編輯器 -> 代碼分析 -> 未定義 -> 來自導入的未定義變量 -> 忽略

就是這樣。

也可能是,Window -> Preferences -> PyDev -> Editor -> Code Analysis -> Imports -> Import not found -> Ignore

標記為答案的帖子提供了一種解決方法,而不是解決方案。

這個解決方案對我有用:

  • 轉到Window - Preferences - PyDev - Interpreters - Python Interpreter
  • 轉到Forced builtins選項卡
  • 點擊New...
  • 輸入模塊的名稱(在我的例子中是multiprocessing ),然后單擊OK

不僅錯誤信息會消失,模塊成員也會被識別。

我在 Eclipse/PyDev 項目中遇到了類似的問題。 在這個項目中,python 代碼的根目錄是項目的子目錄。

--> MyProject
 + --> src         Root of python code
   + --> module1     A module 
   + --> module2     Another module
 + --> docs
 + --> test

當項目被調試或運行時,一切都很好,因為工作目錄被設置到了正確的位置。 然而,PyDev 代碼分析未能找到來自 module1 或 module2 的任何導入。

解決方案是編輯項目屬性 -> PyDev - PYTHONPATH 部分並從源文件夾選項卡中刪除 /MyProject 並將 /MyProject/src 添加到其中。

這對我有用:

步驟1)刪除解釋器,再次自動配置

步驟 2) Window - Preferences - PyDev - Interpreters - Python Interpreter 轉到 Forced builtins 選項卡單擊 New... 鍵入模塊的名稱(在我的情況下為 curses),然后單擊 OK

步驟 3) 在項目資源管理器中右鍵單擊出現錯誤的模塊。 轉到 PyDev-> 代碼分析。

我有同樣的問題。 我在 Windows 上使用 Python 和 Eclipse。 代碼運行得很好,但是 eclipse 到處都顯示錯誤。 我將文件夾'Lib'的名稱改為'lib'(C:\\Python27\\lib)后,問題就解決了。 好像是配置文件中的字母大寫不匹配,有時候會出問題(不過好像也不一定,因為查錯很久了,問題突然出現,不明顯原因)。

我在做什么的近似值:

import module.submodule

class MyClass:
    constant = submodule.constant

pylint 說: E: 4,15: Undefined variable 'submodule' (undefined-variable)

我通過更改我的導入解決了這個問題:

from module.submodule import CONSTANT

class MyClass:
    constant = CONSTANT

注意:我還通過導入的變量重命名為具有大寫名稱以反映其常量性質。

在首選項 --> PyDev --> PyLint中傳遞給 PyLint 的參數下添加以下行:

--generated-members=objects

您需要為每個生成的 . 我通過谷歌搜索找到了這個,但我丟失了參考。

在項目資源管理器中右鍵單擊出現錯誤的模塊。 轉到 PyDev-> 刪除錯誤標記。

我的回答沒有貢獻任何新內容,只是我遇到的一個具體例子。

import gtk.gdk

w = gtk.gdk.get_default_root_window()

PyDev 顯示錯誤消息“來自導入的未定義變量:get_default_root_window()”

在 python shell 中,您可以看到這是一個“內置”模塊,如上面的答案所述:

>>> import gtk.gdk
>>> gtk.gdk
<module 'gtk.gdk' (built-in)>

現在在 Window->Preferences->PyDev->Interpreters->Python Interpreter 下,我選擇了“Forced Builtins”選項卡並將“gtk.gdk”添加到列表中。

現在錯誤消息不再顯示。

我發現這兩個步驟一直對我有用:

  1. 確認(或者添加)模塊的父文件夾到 PYTHONPATH。
  2. 將模塊的全名添加到強制內置函數中。

這里需要注意的事項:

  • 一些流行的模塊安裝了一些具有相同名稱的父子對。 在這些情況下,除了您已經為其他所有內容確認/添加的祖父文件夾之外,您還必須將該父文件夾添加到 PYTHONPATH。

  • 在添加到強制內置程序時使用(例如)“google.appengine.api.memcache”,而不是僅使用“memcache”,其中本示例中的“google”是 PYTHONPATH 中定義的文件夾的直接子級。

您可能只需要在 Eclipse 中重新配置您的 python 路徑。 見我的回答對一個類似問題。

如果您確定您的腳本運行並且它是一個誤報,請轉至首選項 > PyDev > 編輯器 > 代碼分析。 將錯誤降級為警告。

在此處輸入圖片說明

http://www.pydev.org/manual_adv_code_analysis.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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