2012-03-26 9 views
25

Pythonで複数のデータ検証エラーを一度に捕捉、記録、報告するために人々は何を持っていましたか?Pythonで複数の例外を収集し報告するための慣習的な方法

私は最初に入力データを検証し、それを処理するアプリケーションをPython 3で構築しています。最初のステップでエラーを報告することは、プログラムの意図された機能の一部であるため、バリデーターが最初の例外をあきらめてしまわないようにします。特に、データは表形式であるため、検証しない表の各行に対して例外を発生させるのではなく返すことができます。

forum discussion from a couple of years agoは、私にはきれいなようで、以下を含む複数のソリューションを、企図:MultipleValidationErrorsクラスはその中のすべてのValidationErrorsに関する有用な情報を表示するための適切な__str__メソッドを持っているでしょう

errors = [] 
for item in data: 
    try: 
     process(item) 
    except ValidationError as e: 
     errors.append(e) 
if errors: 
    raise MultipleValidationErrors(errors) 

他の人はtracebackモジュールを使用することをおすすめしますが、例外として、プログラムエラーではなくデータ検証エラーが発生することがあります。しかし、loggingモジュールを入手することは適切かもしれません。

+1

多分[この質問](http://stackoverflow.com/questions/6470428/catch-multiple-exceptions-in-one-line-except-block)助けてくれるでしょう – inspectorG4dget

+3

@ inspectorG4dget:その質問は複数のタイプをキャッチすることです例外のこれは、同じ例外タイプの複数のインスタンスをキャッチすることです。 –

+0

あなたが望むコードがあれば、あなたが記述したコードが動作します。また、トレースバックモジュールを使ってより多くの情報を提供することもできます。あるいは、後で使用するために例外オブジェクトをデータ構造に保存するか、他の多くのことを行うことができます。それはあなたの質問から明らかではない、例外に対するあなたの要求が何であるかによって異なります。 –

答えて

6

私はこのイディオムをC++とPythonの両方で使っています。それはログメッセージではなく、例外であることがわかっているときに私が知っている最もクリーンなソリューションです。欠点は、複合例外が一般的に線形空間を占めていることです。これは、エラーの多い大きなデータセットを処理するときに問題になる可能性があります。

+4

この回答は、スタンドアロンで読むときにそのコンテキストが欠落しているようです。私はどのようなイディオムを指しているのかわかりません。 – ThorSummoner

+1

@ThorSummoner larsmansは、OPがリスト内のさまざまな例外をどのように収集し、リストを含む単一の例外を発生させるかを指していると思います。 – Pedro

関連する問題