私はこれがむしろ一般的な問題だと感じたので、他の投稿を検索しましたが、私が見つけた他のPythonの例外に関する質問はすべて私の問題を反映していませんでした。Pythonで例外を処理する正しい方法は?
私は可能な限り具体的なものにしようと考えていますので、私は直接の例を挙げます。そしてpleeeeeaseはこの特定の問題の回避策を投稿しません。私はxyzを使って電子メールをもっとうまく送信する方法に特に関心がありません。 私は、従属性のあるエラーが発生しやすいステートメントをどのように処理するのかを知りたいと思います。
私の質問は、例外をうまく処理する方法です。つまり、互いに依存するものです。 最初の手順が成功した場合のみ、次の手順を繰り返します。もう一つの基準があります:すべての例外を捕まえなければならない、このコードは堅牢でなければなりません。ご検討
、例:
try:
server = smtplib.SMTP(host) #can throw an exception
except smtplib.socket.gaierror:
#actually it can throw a lot more, this is just an example
pass
else: #only if no exception was thrown we may continue
try:
server.login(username, password)
except SMTPAuthenticationError:
pass # do some stuff here
finally:
#we can only run this when the first try...except was successful
#else this throws an exception itself!
server.quit()
else:
try:
# this is already the 3rd nested try...except
# for such a simple procedure! horrible
server.sendmail(addr, [to], msg.as_string())
return True
except Exception:
return False
finally:
server.quit()
return False
は、これは私にとって非常にunpythonic見え、エラー処理コードは、実際のビジネスコードトリプルであるが、一方で、どのように私は、いくつかの文を処理することができます相互に依存しているため、statement1はstatement2の前提条件となります。
私はまた、適切なリソースのクリーンアップに興味があります。でも、Pythonがそれを管理することさえできます。
ありがとう、Tom
dbrを編集していただきありがとうございますが、あなた自身についてはわからないことを編集しないでください。編集基準を基準に編集しましたが、実際には単数で、編集した箇所に複数の意味がないので、 – Tom
Opps、申し訳ありませんが、私は今までの基準の一つしか聞いたことがないと思っています。 – dbr