如何抑制在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的而言,实际上没有什么特别之处_
; 它只是一个合法的标识符名字像任何其他。
然而,对于大多数“皮棉”式的工具(包括希望的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
_
在功能您分配了阴影它的局部值之后。)什么也没有强迫你使用_
在这两种情况下,但如果你使用别的,你很可能会混淆读者(也可能是相同的掉毛的工具,你正在寻找在第一时间安抚)。 所以,你必须决定哪一个是在任何项目对你更重要。 (通常,如果你使用gettext
,那将是更重要的。)
如果你重复调用myfunc
和一些价值观的处置,你可能要考虑写一个包装函数:
def mywrapperfunc():
_, content = myfunc()[2]
return content
那么你的代码可以这样做:
content = mywrapperfunc()
这有很多的优点:
- 这显然更容易比任何事情需要你要记住,你需要一个元组是在多数民众赞成通过返回的序列索引2下半年阅读
myfunc
。 - 它可以让你把一个好听的名字(希望不是更好的地方
mywrapperfunc
)和/或评论/文档字符串,如果它是不平凡的。 - 这意味着,如果以后改变
myfunc
所以所需的值现在是在索引3而不是2,和一个3元素的元组,而不是2-元件的元组的第二构件,你只需要改变mywrapperfunc
代替20个不同的行代码。 - 这也意味着,如果你以后想使用冲突
_
成语(例如,国际化与您的代码gettext
),你只需要改变它在一个地方。
一个侧面说明:在交互式解释, _
确实有特殊的含义:它绑定到最后一个交互式命令的结果。 但是,这并不意味着你不能使用_
在交互式解释。 (事实上,它甚至更好那里,因为什么,你藏有立即覆盖,因此非常罕见的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 - >编辑 - >代码分析, “未使用” 选项卡
查找的设置
如果名称开头不报告未使用的变量:(用逗号隔开)
然后使用前缀之一此列表中,或添加其他前缀。
例如,如果您有下面的代码是暴殄天物变量“TMP”:
tmp, content = myfunc()[2]
你有“_”你的前缀忽略的名单上,然后将其转换“TMP”到“_TMP”是这样的:
_tmp, content = myfunc()[2]
你的错误会自行消失。 我认为这是比只用“_”,由@abarnert建议,而且还避免了与翻译相冲突的并发症更可读的解决方案。
我碰到这样一些时候,我使用类似返回一个元组,当你形容一个特征。 您可以全局设置警告级别的的PyDev在首代码分析 - >的PyDev - >编辑 - >码解析部分。 在代码分析中未使用的标签,也可设置“未使用变量”,以及其他事件的警告级别的选项。
或者,你可以在任何语言中使用额外的插件(包括Python)抑制在Eclipse中给予警告。 http://suppresswarnings.drupalgardens.com
此外avaible在市场上:
https://marketplace.eclipse.org/content/marker-manager