다른 게시물을 검색했습니다.이 질문은 다소 일반적인 문제이지만 다른 모든 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에 대한 전제 조건이다.
나는 또한 적절한 리소스 정리에 관심이 있습니다. 심지어 파이썬이 스스로 관리 할 수 있습니다.
감사합니다, Tom
dbr을 편집 해 주셔서 감사합니다.하지만 자신에 대해 잘 모르는 것을 편집하지 마십시오. 기준에 대한 기준을 다시 편집했습니다. 단, 복수형은 편집 할 때 의미가 없습니다. – Tom
Opps, 죄송합니다. (hm, 전에는 단 하나의 기준을 들어 본 적이 없다고 생각하지 마십시오.) – dbr