[英]How to suppress “unused variable” warnings in Eclipse/PyDev
如何在Eclipse / PyDev中抑制“未使用的變量”警告
當我使用返回元組的函數時,我通常只需要其中一個值,但仍想分配給多個變量。 我希望能夠暫時關閉此警告,以便我可以解決更嚴重的問題。 然后,我可以在做更多的最終檢查時將其重新打開。
如果您想知道為什么我會故意這樣做,那只是為了可讀性。 假設一個函數返回一個元組元組,我的代碼的幾個部分可能與第三個值一起工作,如下所示:
label, content = myfunc()[2]
有時,我可能只對“內容”作品感興趣,但我發現這...
tmp, content = myfunc()[2]
...比這更平行(因此更具可讀性):
content = myfunc()[2][1]
如果有一個更好的方法來做到這一點而不分配一次性未使用的變量,請隨意提供它作為答案。
>>> myfunc()[2]
('lab', 'val')
>>> , v = myfunc()[2]
SyntaxError: invalid syntax
>>> tmp, v = myfunc()[2]
>>>
如果您不需要變量的值,請將其分配給特殊變量_
。
就Python而言, _
實際上並沒有什么特別之處; 它只是另一個合法的標識符名稱。
然而,對於大多數“lint”式工具(希望包括PyDev) - 更重要的是,人類讀者 - 它具有特殊意義“我不需要這個變量,我只是在這里放一些因為API /語法/任何需要它“。 這意味着他們不會警告你不使用它。
所以:
_, content = myfunc()[2]
是的,你是對的,這通常比myfunc()[2][1]
更具可讀性。 不僅如此,它還可以幫助您捕獲更多錯誤 - 如果myfunc()[2]
沒有正好兩個成員,則元組賦值將拋出,但[1]
則不會。
非常非常罕見,這不是一個好主意,因為值是你希望盡快被垃圾收集的東西,並將它綁定到_
而不是根本不綁定它(例如,通過[2][1]
)推遲。
更嚴重的是,這確實與使用_
特殊用法的另一個習慣用法沖突:使用gettext
進行國際化的代碼通常會:
import gettext
_ = gettext.gettext
或者,等效地:
from gettext import gettext as _
顯然你不能使用_
作為gettext快捷方式和無意義的標識符。 (其實你可以逃脫它,因為gettext
意思是在模塊全球層面的約束,以及毫無意義的標識應該只是內部函數體中使用...但是,它仍然是一個非常糟糕的主意去嘗試,因為在某些時候你會在你分配了一個陰影它的局部值之后,最終在函數中使用gettext
_
。在任何一種情況下都沒有強迫你使用_
但是如果你使用其他任何東西,你可能會混淆讀者(可能是相同的)你想要首先安撫的linting工具)。 因此,您必須在任何給定項目中決定哪一個對您更重要。 (通常,如果你使用gettext
,那將是更重要的一個。)
如果您反復調用myfunc
並處理某些值,則可能需要考慮編寫包裝函數:
def mywrapperfunc():
_, content = myfunc()[2]
return content
然后你的代碼可以做:
content = mywrapperfunc()
這有許多優點:
myfunc
返回的序列的索引2中。 mywrapperfunc
更好)和/或評論/文檔字符串的地方,以防它不是微不足道的。 myfunc
所以你想要的值現在是索引3而不是2,而3元素元組的第二個成員而不是2元素元組,你只需要改變mywrapperfunc
而不是20個不同代碼行。 _
慣用法(例如,使用gettext
將代碼用於i18n),您只需要在一個地方更改它。 一方面注意:在交互式解釋器中, _
確實具有特殊含義:它與最后一個交互式命令的結果綁定在一起。 但這並不意味着您不能在交互式解釋器中使用_
。 (事實上,它在那里更好,因為你藏在那里的任何東西都會立即被覆蓋,所以非常罕見的GC問題不會出現。)
將注釋#@UnusedVariable
添加到行尾。
PyDev中的每個警告都有類似的停用注釋。 使用“快速修復”來發現它們(將光標放在警告中並按Ctrl + 1),或者從PyDev源代碼中引用這些行:
public static final String MSG_TO_IGNORE_TYPE_UNUSED_IMPORT = "@UnusedImport";
public static final String MSG_TO_IGNORE_TYPE_UNUSED_WILD_IMPORT = "@UnusedWildImport";
public static final String MSG_TO_IGNORE_TYPE_UNUSED_VARIABLE = "@UnusedVariable";
public static final String MSG_TO_IGNORE_TYPE_UNDEFINED_VARIABLE = "@UndefinedVariable";
public static final String MSG_TO_IGNORE_TYPE_DUPLICATED_SIGNATURE = "@DuplicatedSignature";
public static final String MSG_TO_IGNORE_TYPE_REIMPORT = "@Reimport";
public static final String MSG_TO_IGNORE_TYPE_UNRESOLVED_IMPORT = "@UnresolvedImport";
public static final String MSG_TO_IGNORE_TYPE_NO_SELF = "@NoSelf";
public static final String MSG_TO_IGNORE_TYPE_UNDEFINED_IMPORT_VARIABLE = "@UndefinedVariable";
public static final String MSG_TO_IGNORE_TYPE_UNUSED_PARAMETER = "@UnusedVariable";
public static final String MSG_TO_IGNORE_TYPE_NO_EFFECT_STMT = "@NoEffect";
public static final String MSG_TO_IGNORE_TYPE_INDENTATION_PROBLEM = "@IndentOk";
public static final String MSG_TO_IGNORE_TYPE_ASSIGNMENT_TO_BUILT_IN_SYMBOL = "@ReservedAssignment";
public static final String MSG_TO_IGNORE_TYPE_PEP8 = "@IgnorePep8";
public static final String MSG_TO_IGNORE_TYPE_ARGUMENTS_MISATCH = "@ArgumentMismatch";
首選項 - > PyDev - >編輯器 - >代碼分析,“未使用”選項卡
找到for的設置
如果名稱以以下內容開頭,則不報告未使用的變量:(以逗號分隔)
然后使用此列表中的一個前綴,或添加另一個前綴。
例如,如果您在以下代碼中有一個一次性變量“tmp”:
tmp, content = myfunc()[2]
並且你的前綴列表中有'_'要忽略,然后將“tmp”轉換為“_tmp”,如下所示:
_tmp, content = myfunc()[2]
你的錯誤會消失。 我認為這是一個比使用'_'更可讀的解決方案,正如@abarnert所建議的那樣,它也避免了與翻譯沖突的復雜性。
當我使用與返回元組時描述的功能類似的功能時,我會遇到這種情況。 您可以在Preferences - > PyDev - > Editor - > Code Analysis部分中為PyDev的代碼分析全局設置警告級別。 在“未使用”選項卡的“代碼分析”中,可以選擇為“未使用的變量”以及其他事件設置警告級別。
或者,您可以使用額外的插件以任何語言(包括Python)抑制Eclipse中的給定警告。 http://suppresswarnings.drupalgardens.com
也適用於市場:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.