PyFence:Pythonの型検証





PyFenceは、プロジェクトのデバッグ中に型の一致を監視できる、自作のユーティリティライブラリです。 PyFenceは、 標準のSphinx形式の関数docstringsから型情報を取得します 。 つまり、既にドキュメントがある場合、PyFenceを使用するために他に何もする必要はありません!



たとえば、次のクラスを使用します。





class RationalFormatter (object): def format(self, number): """ Stringifies a number to numerator/denominator format Example:: >>> print(RationalFormatter().format(1.25)) 5/4 :param number: input number :type number: float :raises : None :rtype : str """ return '%i/%i' % number.as_integer_ratio() def display(self, number): print(str(number) + ' = ' + self.format(number))
      
      







formatメソッドは、 float.as_integer_ratio()メソッドを使用して小数を表します



私たちは試します:



 >>> from formatter import RationalFormatter >>> f = RationalFormatter() >>> f.display(1.25) 1.25 = 5/4
      
      







それはうまくいくようですか? ただし、残念ながらintには.as_integer_ratio()が含まれていないため、 intを渡すとすべてが壊れます。



 >>> f.display(5) Traceback (most recent call last): File "example.py", line 5, in <module> f.display(5) File "/home/eugeny/Work/pyfence/example_formatter.py", line 18, in display print(str(number) + ' = ' + self.format(number)) File "/home/eugeny/Work/pyfence/example_formatter.py", line 15, in format return '%i/%i' % number.as_integer_ratio() AttributeError: 'int' object has no attribute 'as_integer_ratio'
      
      







ただし、PyFenceを使用している場合、そのような問題は以前に気づかれていた可能性があります。



 $ pip install pyfence ... $ fence example.py --fence:strict,stop 1.25 = 5/4 *** PyFence ERROR --------------------------- *** PyFence ERROR PyFence verification failed *** PyFence ERROR :: example_formatter.RationalFormatter.format(<example_formatter.RationalFormatter object at 0x7ff097a47d10>, 5) *** PyFence ERROR in example_formatter.py:2 *** PyFence ERROR number was 5 (int) instead of ['float'] *** PyFence ERROR Aborting
      
      







さらに、PyFenceは、関数/メソッドで発生する例外のタイプと戻り値のタイプをチェックできます。

プロジェクト自体にpyfenceモジュールをインポートすることもできます。その場合、別のフェンスユーティリティを使用する必要はありません。

もちろん、チェックのためにパフォーマンスの低下が発生する可能性があるため、本番環境ではなく開発時にのみフェンスを使用する価値があります。



フィードバックプルリクエストに非常に感謝します



All Articles