로직을 처리할 때, if문이 더 효율적일지 try-except문이 더 효율적일지 궁금해져서 찾아보았다.
장점
1. 코드 흐름 예측 가능
2. 예외 발생을 미리 방지하여 불필요한 예외 처리를 줄임
3. 예외 발생 시 성능 저하 없음(실행 비용이 낮음)
4. 조건 처리에 적합
단점
1. 경쟁 조건(Race Condition) 발생 가능
사용하는 경우
경쟁 조건?
두 개 이상의 프로세스가 공유자원에 동시에 접근할 때 발생하는 오류. 경쟁 조건이 발생하면 스레드의 처리 순서에 따라 결과가 바뀔 수 있다. 동기화 매커니즘(Lock 등)을 이용해 해결가능.
exception을 핸들링 장점
1. 여러 종류의 예외를 처리하기 쉬움
단점
1. 예외 발생시 스택 트레이스를 생성해야 하므로 성능 오버헤드 발생 가능성 (잦은 예외 발생시 성능 저하)
2. 코드가 try-except 블록에 감싸여 있어 가독성이 떨어질 수 있음
사용하는 경우
스택 트레이스?
예외가 발생한 지점부터 호출 스택의 모든 함수 호출 정보. 이를 통해 코드에서 발생한 오류를 추적하고 디버깅 할 수 있음.
traceback.print_exc(): 가장 최근에 발생한 예외에 대한 전체 스택 트레이스 출력
예외가 발생하지 않는다면 try-except이 더 빠르다. if의 경우 조건들을 모두 확인해야하기 때문이다. 하지만 try 내부에서 예외가 발생하면, 스택 트레이스를 생성하고 예외 처리를 위한 컨텍스트르 관리해야한다. 예외가 자주 발생하면 try-except가 훨씬 느리다. 예외가 정말 예외적이라면 try-except를, 정상적인 흐름에서 발생하는 예외라면 if를 쓰는 것이 좋다.