본문 바로가기

컴퓨터프로그래밍

예외 처리

exception

-python에서 무엇인가가 잘못된 경우, python에서 interpreter는 exception을 발생시킴.

:동작을 중단시키는 에러

=crash 발생

 

exception handling: exception 처리

-try와 except를 이용해 처리

ex) 예시 코드

try:

    exception이 발생가능한 부분

 

except 처리할_exception as 별칭: #별칭은 발생한 예외 객체를 참조하는 변수. 예외에 간단한 접근을 가능하게 함.

    별칭을 통해 exception객체에 접근

    exception 발생시 실행되는 코드들

 

except 처리할_exception1 as 별칭:

    또 다른 type의 exception에 대한 처리 부분.

    앞서 except에서 처리가 되지 않은 경우에 처리가 됨.(elif와 비슷한 원리)

 

else:

    try block에서 예외가 발생하지 않았을 시 실행됨.

 

finally:

    exception 발생에 상관없이 수행되는 처리 부분(생략가능)

 

  • except code block들은 처리할 exception별로 만들어주면 됨.
  • ValueError: 기대한 값이 아닌 값이 입력되었을 때 발생하는 예외.
  • else
    • except과 finally 사이에 위치
    • try block에서 exception이 발생하지 않은 경우에만 수행됨.
  • exception이 발생하지 않은 경우 else block과 finally block이 수행됨.
  • finally block은 항상 수행됨.

 

예외 처리 예시 코드

 

raise: python에서 예외를 발생시키기 위해 사용하는 키워드. 이를 통해 프로그래머는 특정 조건이 충족되지 않을 때 예외를 일으킬 수 있음. except에서 처리하고 해당 exception을 다시 interpreter에게 넘길 수도 있음. (이 경우 프로그램은 exception으로 종료됨- 비정상종료) 정상종료를 시키기 위해서는 raise를 제거해야함. 비정상종료도 finally문이 수행되고 난 이후임.

ex)

import traceback

try:
    # 어떤 예외를 발생시키는 코드
    raise Exception('예외가 발생했습니다!')
except:
    # 예외 발생 시 traceback 정보를 출력
    traceback.print_exc()

 

모든 exception 한 번에 처리(권장되지 않음.)

except:

    모든 예외 처리

 

syntax error: 문법적 에러

 

 

  • try block: "not_a_number" 라는 문자열을 int()함수에 전달하여 정수로 변환하려 함.
  • not_a_number는 숫자가 아니므로 int로 변환불가 - ValueError 발생
  • except block: 'ValueError' 예외 발생시 except block 실행. 발생한 예외 객체를 'e'라는 변수에 할당함.
  • print(f"ValueError: {e}")는 예외 객체 'e'의 메시지를 출력함. 'e'는 ValueError 객체이고, 이 객체의 메시지('e'가 담고있는 메시지)는 'invalid literal for int() with base 10: 'not_a_number' 이다.
    •  'invalid literal for int() with base 10: 'not a number' 
      • invalid literal: 유효하지 않는 문자열. int()함수가 인자로 받은 문자열이 숫자로 해석될 수 없음.
      • for int() with base 10: base 10-십진법 사용, int() 함수가 기본적으로 사용하는 십진법(base 10)을 기준으로 변환을 시도했음.
      • not_a_number: 변환을 시도한 문자열 명시

 

 

  • 참고
    • traceback: python 실행에서 에러가 발생할 경우 출력됨. 해당 에러가 발생한 지점에서의 stack의 정보를 역추적하여 출력한 결과물
    • stack(First-In-Last-Out): 처음으로 들어온 요소가 마지막으로 나감.(쌓임)
    • debugging시 밑에서부터 읽어 올라감.
      • 디버깅: 프로그램이나 소프트웨어의 버그를 찾아내고 수정하는 과정. 코드 실행 중에 발생하는 오류를 식별하고 해결하는 과정임. 디버깅을 이용해 프로그램이 예상대로 작동하지 않는 이유를 파악하고 수정할 수 있다.
    • print_exc(): traceback 메시지 출력. 주로 예외가 발생한 경우 즉시 추적 정보를 표시하고자 할 때 유용함.
    • format_exc(): traceback 메시지에 해당하는 문자열 반환. 추적 정보를 변수에 저장하거나 파일에 기록하고자 할 때 유용함. 

'컴퓨터프로그래밍' 카테고리의 다른 글

paradigm  (0) 2024.05.20
nested, scope  (0) 2024.05.20
control structure  (0) 2024.05.20
expression, statement  (0) 2024.05.20
Python Type  (0) 2024.05.20