web-dev-qa-db-ja.com

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

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]
>>> 
22
Jon Coombs

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

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ショートカットと無意味な識別子の両方として使用することはできません。 (あなたcould実際にはそれを回避します。gettextの意味はモジュールグローバルレベルでバインドされており、無意味な識別子は関数本体の内部でのみ使用する必要があります...しかし、それでもシャドウするローカル値を割り当てた後、ある時点で関数でgettext_を使用することになるため、試してみるのは非常に悪い考えです。)どちらの場合も_を使用する必要はありません。他のものを使用すると、読者を混乱させる可能性があります(そして、おそらく最初に鎮静化しようとしているのと同じリンティングツール)。したがって、特定のプロジェクトでどちらが重要かを判断する必要があります。 (通常、gettextを使用している場合は、それがより重要になります。)

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

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

それからあなたのコードはただ行うことができます:

content = mywrapperfunc()

これにはいくつかの利点があります。

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

補足:インタラクティブインタプリタでは、_doesには特別な意味があります。これは、最後のインタラクティブコマンドの結果にバインドされます。しかし、それはインタラクティブインタプリタで_を使用できないという意味ではありません。 (実際、そこに隠しておいたものはすぐに上書きされるため、非常にまれなGCの問題は発生しません。)

40
abarnert

コメントを追加#@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";
23
joshua

環境設定-> PyDev->エディター->コード分析、[未使用]タブ

の設定を見つける

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

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

たとえば、次のコードに使い捨て変数「tmp」がある場合:

tmp, content = myfunc()[2]

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

_tmp, content = myfunc()[2]

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

5
Mark Chackerian

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

3
sid16rgt

または、追加のプラグインを使用して、any言語(Pythonを含む)でEclipseの特定の警告を抑制することができます。 http://suppresswarnings.drupalgardens.com

市場でも入手可能:

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

0
Philippe