私はあまり Python プログラマーではありませんが、答えは「YES」だと思います。
いつでも任意の名前の変数を作成できる動的言語では、'strict' プラグマを使用できます。
Perl の Strict vars (Perl の strict のオプションの 1 つで、'use strict' はそれらすべてを一度に有効にします) では、すべての変数を使用する前に宣言する必要があります。つまり、このコード:
my $strict_is_good = 'foo';
$strict_iS_good .= 'COMPILE TIME FATAL ERROR';
コンパイル時に致命的なエラーを生成します。
コンパイル時に Python にこのコードを拒否させる方法がわかりません:
strict_is_good = 'foo';
strict_iS_good += 'RUN TIME FATAL ERROR';
strict_iS_good
未定義の実行時例外が発生します。ただし、コードが実行されたときのみ。テスト スイートのカバレッジが 100% でない場合は、このバグを簡単に出荷できます。
この動作を持たない言語 (たとえば PHP) で作業するときはいつでも、緊張します。私は完璧なタイピストではありません。単純だが見つけにくいタイプミスが原因で、追跡が困難な方法でコードが失敗する可能性があります。
したがって、繰り返しますが、YES Python は「strict」プラグマを使用して、コンパイル時にチェックできるものに対してコンパイル時チェックをオンにすることができます。他に追加すべきチェックは思い浮かびませんが、より優れた Python プログラマーであれば、おそらくいくつか考えられるでしょう。
注意:私は Perl の stict vars の実際的な効果に焦点を当てており、詳細の一部については触れていません。本当にすべての詳細を知りたい場合は、perldoc の strictを参照してください。
更新: いくつかのコメントへの応答
Jason Baker : pylint のような静的チェッカーは便利です。しかし、それらはスキップされる可能性があり、多くの場合スキップされる余分なステップを表しています。いくつかの基本的なチェックをコンパイラに組み込むことで、これらのチェックが一貫して実行されることが保証されます。これらのチェックがプラグマによって制御可能である場合、チェックのコストに関連する異論も意味がありません。
popcnt : Python が実行時例外を生成することはわかっています。私はそれだけ言った。可能であれば、コンパイル時のチェックを推奨します。投稿を読み直してください。
mpeters : コードをコンピュータで分析しても、すべてのエラーを見つけることはできません。これは、停止の問題を解決することになります。さらに悪いことに、割り当てのタイプミスを見つけるために、コンパイラはユーザーの意図を知り、ユーザーの意図がコードと異なる場所を見つける必要があります。これは明らかに不可能です。
ただし、これは、チェックを行う必要がないことを意味するものではありません。検出しやすい問題のクラスがある場合、それらをトラップすることは理にかなっています。
私は、pylint と pychecker がどのクラスのエラーをキャッチするかについて十分に理解していません。私が言ったように、私はPythonに非常に不慣れです。
これらの静的解析プログラムは便利です。ただし、コンパイラの機能を複製しない限り、コンパイラは常に、静的チェッカーよりもプログラムについてより多くのことを「知る」立場にあると私は信じています。可能な限りエラーを減らすためにこれを利用しないのはもったいないようです。
更新 2:
cdleary - 理論的には、静的アナライザーはコンパイラーができる検証を行うことができます。そして Python の場合は、それで十分なはずです。
ただし、コンパイラが十分に複雑な場合 (特に、コンパイルの方法を変更するプラグマが多数ある場合、または Perl のようにコンパイル時にコードを実行できる場合)、静的アナライザーはコンパイラー/インタープリターの複雑さにアプローチして、分析を行います。
へー、複雑なコンパイラとコンパイル時のコードの実行に関するこのすべての話は、私の Perl のバックグラウンドを示しています。
私の理解では、Python にはプラグマがなく、コンパイル時に任意のコードを実行することはできません。したがって、私が間違っているか、これらの機能が追加されていない限り、静的アナライザーの比較的単純なパーサーで十分です。実行ごとにこれらのチェックを強制することは確かに役に立ちます。もちろん、これを行う方法はプラグマを使用することです。
プラグマをミックスに追加すると、滑りやすい坂道を下り始めたことになります。アナライザーの複雑さは、プラグマで提供するパワーと柔軟性に比例して増加する必要があります。注意を怠ると、Perl のようになってしまい、"Python だけが Python を解析できる" という、私が望んでいない未来になる可能性があります。
強制静的解析を追加するには、コマンド ライン スイッチの方が適しているかもしれません ;)
(Python が Perl のようにコンパイル時の動作を混乱させることはできないと私が言うとき、決して Python の機能を非難するつもりはありません。これは慎重に検討された設計上の決定であり、そこに知恵があることがわかります。Perl のコンパイル時の極端な柔軟性は、私見ですが、この言語の大きな強みであり、ひどい弱点でもあります; 私はこのアプローチにも知恵があると思います.)