2011-01-13 3 views
5

언제 각각을 사용합니까? 나는 예외를 제외하고는 if를 사용하고있는 것으로 나타났습니다. 내 "ifs"를 사용하여 예외를 잡는 것처럼 보입니다. 내 코드에는 온통 이상이 있습니다."if"를 사용하여 오류를 검사해야하는시기와 예외를 사용해야하는시기는 언제입니까?

+1

이 글은 무수히 번졌습니다 (2739582, 1152541, 1313812). 이 질문 사이에, 귀하의 질문 4557577 (그리고 의심 할 여지없이 수많은 사람들), 그리고 지금은 * 800여 질문 *, 그것은 당신이 질문 스패머의 무언가 인 것 같습니다. –

답변

2

Try catch 문은 심각한 오류를 처리하고 특히 웹 서비스, 데이터베이스, 웹 요청과 같은 외부 서비스에 연결하기 위해 고안되었습니다. 오류가 발생하여 때때로 발생하는 것으로 예상됩니다. 런타임 환경에서 좋은 코드를 작성하고 if 또는 ternary 연산과 같은 주어진 언어의 기능을 활용하는 것보다 예외를 처리하는 것이 더 중요합니다.

try catch는 방어선의 첫 번째 줄이 아니며 방어적인 코딩 방법을 사용하는 마지막 줄입니다.

1

특히 대형 응용 프로그램을 사용하는 경우 예외 처리가 실제로 더 나은 방법입니다. 앞에서 언급했듯이 if 문은 많이 사용됩니다. python을 사용하면 try/except 문을 사용하면보다 표준화 된 예외 처리 방법을 만들 수 있습니다. 예외를 사용하면 예외 클래스 유형 및 사용자가 빌드 한 다른 클래스를 보는 이점을 얻을 수 있습니다. 그것은 단지 훨씬 더 구조화 된 코딩 방법을 제공합니다.

4

EAFP: Easier to ask for forgiveness than permission.

그것은 가정이 거짓 증명 유효 키 또는 속성과 캐치 예외의 존재를 가정하는 것이 일반적인 파이썬 코딩 스타일이다.

이 C와 같은 다른 언어에 공통 LBYL (Look before you leap) 스타일과 대조를

물론 업데이트 1

, 당신은 당신이 어떤 잡은 예외를 처리 보장하고 아무것도하지 않고 그들을 무시해서는 안 그렇지 않으면 디버깅에 많은 시간을 낭비하게됩니다! pass은 아마도 당신이 찾고있는 것이 아닙니다! 그들이 built-in exceptions하거나인지

업데이트 2

당신은 raise -d로 기대 특정 예외 당신이 를 잡을 것이다.

+0

일반 try 시도 : Exceptione 제외 : print e pass 그 oK입니까? – TIMEX

+0

@TIMEX : 일반적인 대답은 없습니다. 예외를 처리하는 방법은 그것이'raise' -d 일 때 어떤 처리를했는지에 달려 있습니다. 그것은'pass'가 당신이 원하는 것이 거의 없다고 말했습니다! – Johnsyweb

+1

예외 핸들링 대'if' 문을 사용하면 독자가 코드의 독자에게 어떤 일이 일어날 것으로 예상되는지 알려주는 것은 주목할 가치가 있습니다. 'if' 문은 조건이'True' 또는'False' 일 가능성이 크다는 것을 암시하며,'try' /'except'는 엣지 경우의 처리를 의미합니다. 따라서, EAFP는 idomatic python 일 수 있지만, 주어진 경우에는 해석의 여지가 있습니다. 또한 예외를 제외하고는 거의 사용하지 않아야합니다. – Wilduck

2

나는 많은 사람들이 이미 말한 반복 아니지만, 내가 언급하고 싶습니다 예외를 사용하는 큰 이점이있다 : 어떤 루틴이 실패

경우, 당신은 쉽게 어떤 수준에 을 결정할 수는 간접적 인 경우에는 예외을 처리해야하며, 말하자면 단계별로 오류 검사를 통해 더 높은 레벨을 부풀릴 필요가 없습니다.

물론 모든 가능한 실행 경로에 대해 모든 것을 명확하게 해주는 좋은 정리 코드가 필요하지 않으므로 리소스, 소켓, 커밋 또는 롤백 트랜잭션 등을 해제하십시오.그리고 그렇게 할 수있는 많은 방법이 있습니다 :

  • with 문 (파이썬과 관련된),

    • try... finally 블록, 예외 전파 할 수 있지만, 전 (파이썬 등 많은 언어로) 모든 것을 정리
    • 소멸자를 정리하는 RAII 패러다임 (주로 C++).
  • 관련 문제