次のサンプル コードを検討してください。
data = []
try:
print data[0]
except IndexError as error:
print error.message
警告をオンにして python を実行すると、次のように表示されることを除いて、コードに構文的に問題はありません (Python2.7 を使用) DeprecationWarning
。
$ python -W always test.py
test.py:5: DeprecationWarning: BaseException.message has been deprecated as of Python 2.6
print error.message
list index out of range
参考までに、これは.message
python2.6 から廃止され、 python3 で削除されたためです。
ここで、静的コード分析ツールを使用.message
して、例外インスタンスで呼び出されるプロジェクト内のすべての場所を見つけたいと思います。最終的な目標として、このチェックを毎日のビルドとテストとコードの品質チェック タスクの一部として実行し、構文がまだ使用されている場合はエラーを発生させることを計画しています。
出来ますか?それはpylint
、pyflakes
または他のコード分析ツールで可能なものですか?
pep8
ツールhas_key()
には、使用状況チェックなど、いくつかの同様のチェックが実装されていることがわかりました。
$ cat test.py
my_dict = {}
print my_dict.has_key('test')
$ pep8 test.py
test.py:2:14: W601 .has_key() is deprecated, use 'in'
別の解決策として、すべての警告をエラーとして扱い (ここで提案されているように)、テストを失敗させることができますが、これには欠点があります。
- 修正できないサードパーティ製パッケージからの非推奨の警告が他にもある
- 厳密に言えば、これには 100% のカバレッジが必要であり、これを維持することは困難です。