25

Eclipse/PyDevで「未使用の変数」の警告を抑制する方法

タプルを返す関数を使用しているときは、値の1つだけが必要になることがよくありますが、それでも複数の変数に割り当てたいと考えています。この警告を一時的にオフにして、より深刻な問題に焦点を当てられるようにしたいと思います。その後、最終チェックをさらに行うときに、オンに戻すことができます。

なぜ私がこれを故意に行うのか疑問に思っているのなら、それは読みやすさのためだけです。関数がタプルのタプルを返すとすると、コードのいくつかの部分が次のように3番目の値で機能する可能性があります。

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]
>>> 
4

5 に答える 5

43

変数の値が必要ない場合は、それを特殊変数に割り当てます_

Pythonに関する限り、実際には特別なことは何もありません_。これは、他のものと同様に、別の正当な識別子名です。

ただし、ほとんどの「lint」スタイルのツール (できれば PyDev を含む)、さらに重要なことに、人間のリーダーにとっては、「この変数は必要ありません。API/構文/それを必要とするものは何でも」. つまり、使用しないことを警告することはありません。

そう:

_, content = myfunc()[2]

はい、これは多くの場合、より読みやすいというのは正しいですmyfunc()[2][1]。それだけでなく、さらにいくつかのエラーをキャッチするのにも役立ちます。 のmyfunc()[2]メンバーがちょうど 2 つでない場合、タプルの代入はスローしますが、 はスローし[1]ません。

非常にまれですが、これは良い考えではありません。なぜなら、値はできるだけ早くガベージ コレクションしたいものであり、_まったくバインドしないのではなく (たとえば を介して[2][1]) にバインドすると、それが遅延するからです。

_もっと深刻なことに、これは:を特別に使用する別のイディオムと競合しますgettext

import gettext
_ = gettext.gettext

または、同等に:

from gettext import gettext as _

_明らかに、gettext ショートカットと無意味な識別子の両方として使用することはできません。(意味はモジュールグローバルレベルでバインドされており、意味のない識別子は関数本体内でのみ使用する必要があるため、実際にはそれでうまくいく可能性があります…しかし、それでも、ある時点で終了するため、試すのは非常に悪い考えです.どちらの場合でも使用を強制するものは何もありませんが、それ以外のものを使用すると、読者を混乱させる可能性があります (おそらく、同じ lint ツールを使用することになりますgettext) gettext __そもそもなだめようとしている)。したがって、特定のプロジェクトでどちらが重要かを判断する必要があります。(通常、 を使用している場合はgettext、'

一部の値を繰り返し呼び出しmyfuncて破棄する場合は、ラッパー関数を作成することを検討してください。

def mywrapperfunc():
    _, content = myfunc()[2]
    return content

次に、コードで次のことができます。

content = mywrapperfunc()

これには多くの利点があります。

  • によって返されるシーケンスのインデックス 2 にあるタプルの後半が必要であることを覚えておく必要がある何よりも、明らかに読みやすいですmyfunc
  • 些細なことではない場合に備えて、素敵な名前 (できればより良いものmywrapperfunc) やコメント/ドキュメント文字列を配置する場所を提供します。
  • 後で変更myfuncして、必要な値が 2 ではなく 3 になり、2 要素タプルではなく 3 要素タプルの 2 番目のメンバーになった場合mywrapperfunc、20 の異なる行の代わりに変更するだけで済みます。コード。
  • _また、後で競合するイディオムを使用する場合 (たとえば、コードを i18n で国際化する場合gettext)、1 か所だけ変更する必要があることも意味します。

補足: 対話型インタープリターで_ 、特別な意味があります。最後の対話型コマンドの結果にバインドされます。_しかし、それは対話型インタープリターで使用できないという意味ではありません。(実際、そこに保存したものはすぐに上書きされるため、非常にまれな GC の問題が発生しないため、さらに優れています。)

于 2012-12-19T01:32:51.210 に答える
23

#@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";
于 2013-01-29T20:45:42.617 に答える
5

Preferences -> PyDev -> Editor -> Code Analysis 、「未使用」タブ

の設定を見つける

名前が次で始まる場合、未使用の変数を報告しない: (コンマ区切り)

次に、このリストのプレフィックスの 1 つを使用するか、別のプレフィックスを追加します。

たとえば、次のコードに使い捨て変数「tmp」があるとします。

tmp, content = myfunc()[2]

無視するプレフィックスのリストに「_」があり、次のように「tmp」を「_tmp」に変換します。

_tmp, content = myfunc()[2]

エラーはなくなります。@abarnert で提案されているように、これは単に「_」を使用するよりも読みやすいソリューションであり、翻訳との競合の複雑さも回避できると思います。

于 2013-07-25T17:47:22.507 に答える
3

タプルが返されたときに説明した機能と同様の機能を使用すると、これに遭遇することがあります。[設定] -> [PyDev] -> [エディター] -> [コード分析] セクションで、PyDev のコード分析の警告レベルをグローバルに設定できます。[未使用] タブの [コード分析] には、「未使用の変数」およびその他の発生に対する警告レベルを設定するオプションがあります。

于 2012-12-19T01:38:11.913 に答える