언제 각각을 사용합니까? 나는 예외를 제외하고는 if를 사용하고있는 것으로 나타났습니다. 내 "ifs"를 사용하여 예외를 잡는 것처럼 보입니다. 내 코드에는 온통 이상이 있습니다."if"를 사용하여 오류를 검사해야하는시기와 예외를 사용해야하는시기는 언제입니까?
답변
Try catch 문은 심각한 오류를 처리하고 특히 웹 서비스, 데이터베이스, 웹 요청과 같은 외부 서비스에 연결하기 위해 고안되었습니다. 오류가 발생하여 때때로 발생하는 것으로 예상됩니다. 런타임 환경에서 좋은 코드를 작성하고 if 또는 ternary 연산과 같은 주어진 언어의 기능을 활용하는 것보다 예외를 처리하는 것이 더 중요합니다.
try catch는 방어선의 첫 번째 줄이 아니며 방어적인 코딩 방법을 사용하는 마지막 줄입니다.
특히 대형 응용 프로그램을 사용하는 경우 예외 처리가 실제로 더 나은 방법입니다. 앞에서 언급했듯이 if 문은 많이 사용됩니다. python을 사용하면 try/except 문을 사용하면보다 표준화 된 예외 처리 방법을 만들 수 있습니다. 예외를 사용하면 예외 클래스 유형 및 사용자가 빌드 한 다른 클래스를 보는 이점을 얻을 수 있습니다. 그것은 단지 훨씬 더 구조화 된 코딩 방법을 제공합니다.
EAFP: Easier to ask for forgiveness than permission.
그것은 가정이 거짓 증명 유효 키 또는 속성과 캐치 예외의 존재를 가정하는 것이 일반적인 파이썬 코딩 스타일이다.
이 C와 같은 다른 언어에 공통 LBYL (Look before you leap) 스타일과 대조를
물론 업데이트 1
, 당신은 당신이 어떤 잡은 예외를 처리 보장하고 아무것도하지 않고 그들을 무시해서는 안 그렇지 않으면 디버깅에 많은 시간을 낭비하게됩니다! pass
은 아마도 당신이 찾고있는 것이 아닙니다! 그들이 built-in exceptions하거나인지
업데이트 2
당신은 raise
-d로 기대 특정 예외 당신이 를 잡을 것이다.
일반 try 시도 : Exceptione 제외 : print e pass 그 oK입니까? – TIMEX
@TIMEX : 일반적인 대답은 없습니다. 예외를 처리하는 방법은 그것이'raise' -d 일 때 어떤 처리를했는지에 달려 있습니다. 그것은'pass'가 당신이 원하는 것이 거의 없다고 말했습니다! – Johnsyweb
예외 핸들링 대'if' 문을 사용하면 독자가 코드의 독자에게 어떤 일이 일어날 것으로 예상되는지 알려주는 것은 주목할 가치가 있습니다. 'if' 문은 조건이'True' 또는'False' 일 가능성이 크다는 것을 암시하며,'try' /'except'는 엣지 경우의 처리를 의미합니다. 따라서, EAFP는 idomatic python 일 수 있지만, 주어진 경우에는 해석의 여지가 있습니다. 또한 예외를 제외하고는 거의 사용하지 않아야합니다. – Wilduck
나는 많은 사람들이 이미 말한 반복 아니지만, 내가 언급하고 싶습니다 예외를 사용하는 큰 이점이있다 : 어떤 루틴이 실패
경우, 당신은 쉽게 어떤 수준에 을 결정할 수는 간접적 인 경우에는 예외을 처리해야하며, 말하자면 단계별로 오류 검사를 통해 더 높은 레벨을 부풀릴 필요가 없습니다.
물론 모든 가능한 실행 경로에 대해 모든 것을 명확하게 해주는 좋은 정리 코드가 필요하지 않으므로 리소스, 소켓, 커밋 또는 롤백 트랜잭션 등을 해제하십시오.그리고 그렇게 할 수있는 많은 방법이 있습니다 :
with
문 (파이썬과 관련된),
try... finally
블록, 예외 전파 할 수 있지만, 전 (파이썬 등 많은 언어로) 모든 것을 정리- 소멸자를 정리하는 RAII 패러다임 (주로 C++).
- 1. 셰이더 프로그래밍에서 유니폼을 사용해야하는시기는 언제입니까?
- 2. WCF에서 TCP 바인딩을 사용해야하는시기는 언제입니까?
- 3. 인라인 대신 __forceinline을 사용해야하는시기는 언제입니까?
- 4. MVVM에서 사용하는 경우 속성과 변환기를 사용해야하는시기는 언제입니까?
- 5. asp.net mvc 2에서 비동기 컨트롤러를 사용해야하는시기는 언제입니까?
- 6. 일반 PropertyMetadata보다 FrameworkPropertyMetadata 또는 UIPropertyMetadata를 사용해야하는시기는 언제입니까?
- 7. ColdFusion 응용 프로그램에서 Java를 사용해야하는시기는 언제입니까?
- 8. MySQL 테이블에서 "NOT NULL"을 사용해야하는시기는 언제입니까?
- 9. DataContract 대신 메시지 계약을 사용해야하는시기는 언제입니까?
- 10. Java에서 인터페이스에서 추상 메소드를 사용해야하는시기는 언제입니까?
- 11. 웹 응용 프로그램에서 프로파일을 사용해야하는시기는 언제입니까?
- 12. 하스켈의 데이터 선언에 레코드 구문을 사용해야하는시기는 언제입니까?
- 13. 예외를 던지는시기는 언제입니까?
- 14. 예외를 기록하는시기는 언제입니까?
- 15. PHP에서 예외를 사용하는 것이 좋은시기는 언제입니까?
- 16. SQL Server에서 Begin/End Blocks 및 Go 키워드를 사용해야하는시기는 언제입니까?
- 17. JavaScript에서 delete vs setting 요소를 null로 사용해야하는시기는 언제입니까?
- 18. C#에서는 struct를 언제 사용해야합니까? 클래스를 사용해야하는시기는 언제입니까?
- 19. android 위젯 또는 응용 프로그램에서 singleTop launchMode를 사용해야하는시기는 언제입니까?
- 20. .NET 프레임 워크에서 XML 직렬화와 이진 직렬화를 사용해야하는시기는 언제입니까?
- 21. Objective-C 메소드 이름에서 "and"를 사용해야하는시기는 언제입니까?
- 22. 언제 UdpClient.BeginReceive를 사용해야합니까? 백그라운드 스레드에서 UdpClient.Receive를 사용해야하는시기는 언제입니까?
- 23. 자바에서 if를 사용하여 스위치를 만들려고 시도했습니다.
- 24. IF를 LINQ로 변환
- 25. IF를 SQL Server보기에서 사용
- 26. GAC를 사용하여 어셈블리를 공유해야하는시기는 언제입니까?
- 27. With-With With를 사용해야하는 경우와 VB6에서 일반 개체 참조를 사용해야하는시기는 언제입니까? 내가 유지하고있는 코드를 정독하는
- 28. SqlCommand 매개 변수를 추가 할 때 "SqlDbType"및 "size"를 사용해야하는시기는 언제입니까?
- 29. Java에서 까다로운 숫자 정렬 질문입니다. if를 사용하여 오름차순 정렬 방법?
- 30. 예외를 사용하여 md5 검색
이 글은 무수히 번졌습니다 (2739582, 1152541, 1313812). 이 질문 사이에, 귀하의 질문 4557577 (그리고 의심 할 여지없이 수많은 사람들), 그리고 지금은 * 800여 질문 *, 그것은 당신이 질문 스패머의 무언가 인 것 같습니다. –