如何抑制在Eclipse中“未使用变量”警告/ PyDev的(How to suppress “un

2019-07-05 19:21发布

如何抑制在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]
>>> 

Answer 1:

如果你不需要一个变量的值,将其分配给特殊变量_

至于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问题不上来。)



Answer 2:

注释添加#@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";


Answer 3:

首选项 - >的PyDev - >编辑 - >代码分析, “未使用” 选项卡

查找的设置

如果名称开头不报告未使用的变量:(用逗号隔开)

然后使用前缀之一此列表中,或添加其他前缀。

例如,如果您有下面的代码是暴殄天物变量“TMP”:

tmp, content = myfunc()[2]

你有“_”你的前缀忽略的名单上,然后将其转换“TMP”到“_TMP”是这样的:

_tmp, content = myfunc()[2]

你的错误会自行消失。 我认为这是比只用“_”,由@abarnert建议,而且还避免了与翻译相冲突的并发症更可读的解决方案。



Answer 4:

我碰到这样一些时候,我使用类似返回一个元组,当你形容一个特征。 您可以全局设置警告级别的的PyDev在首代码分析 - >的PyDev - >编辑 - >码解析部分。 在代码分析中未使用的标签,也可设置“未使用变量”,以及其他事件的警告级别的选项。



Answer 5:

或者,你可以在任何语言中使用额外的插件(包括Python)抑制在Eclipse中给予警告。 http://suppresswarnings.drupalgardens.com

此外avaible在市场上:

https://marketplace.eclipse.org/content/marker-manager



文章来源: How to suppress “unused variable” warnings in Eclipse/PyDev