メソッドを呼び出したいのですf()
が、うっかり と言ってしまいますf
。Python3 は、これを存在しない変数の無意味な評価と間違えるため、意図したメソッド呼び出しを予告なしにスキップします。このデフォルトの動作をオーバーライドしてエラー メッセージを表示する方法はありますか? メソッドと変数としての識別子の二重使用を禁止するか、識別子だけで構成される無意味なステートメントを禁止するかのどちらかですか?
4 に答える
これは有効な構文なので、Python は文句を言いません。pylint などの他のツールを検討することもできます。Pylint は次のように報告します。
W: 4,0: Statement seems to have no effect
あなたが単にした場合:
f
それ以外の:
f()
唯一の問題は、pylint が箱から出してすぐに非常に多くの文句を言う可能性があることです。あなたのスタイルに寛容な構成を作成してください。
In [1]: def f():
...: print("This is some random function")
...: return
In [2]: a = f
In [3]: a()
This is some random function
In [4]: somedict = {"call_something": f, "call_another": a}
In [5]: somedict["call_something"]()
This is some random function
In [6]: f
Out[6]: <function __main__.f>
関数を呼び出さずに使用することは完全に有効な構文であり、今示したようにさまざまな用途があります。a meaningless evaluation of a nonexisting variable
関数は本質的に変数であるため、そうではありません。
コードが想定どおりに動作することを確認する通常の方法は、単体テストを作成することです。この種のバグは、十分なテスト カバレッジがあれば見逃すことはできません。
関数/メソッドへの参照を渡すことは、Python では非常に一般的 (かつ便利) であるため、無効にする必要はありません。
ああ、いいえ。Python には厳密な警告モードはありません (Perl と Ruby を参照)。その上、そのような行は有効なステートメントであるため、それらに対して警告するのは公平ではありません.
ただし、独自のコード チェッカーを作成して、このような行を見つけることもできます。句読点のない単一の単語であり、Python 識別子 ( などのキーワードではないbreak
)である行を検索します。