Q用のPython警告を探す:矛盾、同じ機能の複数の定義がある場合にはPythonが私に警告を与えるために取得する方法がある、など乗算定義関数
(私は無駄に同じ機能の2つの異なるバージョンに編集を行う時のビット)
競合関数定義の小さな例:
$> cat ./foo2.py
cat ./foo2.py
def foo():
print "1st definition of foo()"
def foo():
print "2nd definition of foo()"
foo()
実行 - Pythonは、最後の定義を使用します。 (それは正式に定義されているのですか?それは便利なセマンティクスです。たとえば、文字列の関数を即座に作成して評価するときなどに便利ですが、インタプリタでは便利ですが、場合によってはバグをマスクして、 。
$> python -W all ./foo2.py
python -W all ./foo2.py
2nd definition of foo()
どちらも "警告を使用して" ん:警告)
$> python ./foo2.py
python ./foo2.py
2nd definition of foo()
"-Wすべてのpythonは" 警告を与えるものではありません。そのことについては
(のpython3が:-(印刷するには、引数の周りに括弧が必要ですが)、のpython3は上記と同じことを行います。
pylintはエラーに
E: 4, 0: function already defined line 2 (function-redefined)
を報告んが、私が持っています(lintは騒々しい; lintはオプションであり、常に実行されるわけではなく; lintはオプションであり、例えばpythonに自動的にインストールされず、必須であるなど)。私はインストールするためにいくつかのハックを行うために(自家製の問題?) - 私はほとんど諦め、私があきらめていたなら私はしなかったpylintを持っていた)
そのため、pylintがエラーを見つけるんが、私はまだ聞いて:。
Qを:乗算定義関数のエラーまたは警告を報告するのpython自体を取得する方法はありますか?
比較すると===
、と言う人々に応じて、「なぜ、あなたは動的言語でそれをやりたいのでしょうか?」
Perlは動的言語です。 Perlが最初に出てきたとき、そのような警告はなかった。しかし、現在では、人々はそのような警告がコード品質には良いことを認識しています。
Perlはデフォルトで複数の定義について警告しませんが、-Wallで警告したり、警告を使用したりします。
$> cat foo2.pl
cat foo2.pl
sub foo { print "foo#1" }
sub foo { print "foo#2" }
foo()
$> perl -Wall ./foo2.pl
perl -Wall ./foo2.pl
Subroutine foo redefined at ./foo2.pl line 2.
foo
いいえ、存在しません。 Pythonは非常に動的な言語であり、名前を他のもの(関数など)に再割当てすることを止めるものはありません。 – jonrsharpe
これは、より一般的な質問[http-python-have-a-use-strict-and-use-warnings-like-perl]のように、オプションで有効にしたいという警告の特定の例です(http ://stackoverflow.com/questions/13425715/does-python-have-a-use-strict-and-use-warnings-like-in-perl) –
そしてその質問に対する答えは「no」*あなたは何を期待しましたか? – jonrsharpe