次の3つのいずれかを返すことができる関数があります。
- 成功(
True) - 失敗(
False) - ストリームの読み取り/解析エラー(
None)
私の質問は、Trueまたはに対してテストすることになっていない場合False、結果がどうなるかをどのように見ればよいかです。以下は私が現在それをやっている方法です:
result = simulate(open("myfile"))
if result == None:
print "error parsing stream"
elif result == True: # shouldn't do this
print "result pass"
else:
print "result fail"
== Trueパーツを削除するのと同じくらい簡単ですか、それともトライブールデータタイプを追加する必要がありますか。simulate外部プログラムでエラーを処理するためにログに記録して続行するだけなので、関数に例外をスローさせたくありません。
simulate関数内ですべての例外をキャッチします。シミュレーター内で何が起こっても、残りのプログラムの実行を停止(および次の要素を処理)したくありません。しかし、答えは私の心を変えさせています。
simulateキャッチして再試行できるものがあれば、それは良いことです。しかし、それが「失敗」した場合は、戻りませんNone。それを呼び出したスクリプトに例外を発生させるだけです。どちらにしても、simulate完了です。戻ることNoneは、適切な例外を発生させるほど役立ちません-または、例外をsimulate呼び出しスクリプトに伝播して処理することができます。
except Exception:代わりに使用してください。これは、Warningおよびとともに、すべての「実際の」エラーをキャッチしますStopIteration。それは可能にKeyboardInterruptし、SystemExitしかし通じ。これらを「エラー」ではないため、本当にキャッチしたい場合は、意図を明確に文書化した別の外部try / exceptまたはその他の構造を使用することをお勧めします。(しかし、私は「ほとんど決してしなかった」と言いました...おそらくあなたの場合、あなたは本当にすべてをつかんで、Ctrl-C sys.exit()を終了したり、終了したりすることさえしたいと思っています。)