CodeGym /자바 코스 /Python SELF KO /프로그램 실행 중 오류

프로그램 실행 중 오류

Python SELF KO
레벨 17 , 레슨 0
사용 가능

1.1 오류 발생

오류(그리고 예외)는 프로그래밍의 필수적인 부분이야. 프로그램이 예상치 못한 상황에 직면했을 때 발생하고, 이를 처리할 수 없을 때 발생해. Python에는 예외 처리 시스템이 있어서 오류를 잡고 처리할 수 있지, 그래서 프로그램이 그냥 중단되지 않도록 할 수 있어.

예외는 주로 다음과 같은 상황에서 발생해:

구문 오류:

이러한 오류는 코드 컴파일 단계에서 발견되고 Python 언어의 잘못된 문법과 관련이 있어. 예를 들어, 콜론을 빼먹거나 잘못된 키워드를 사용하는 경우야.


if True:
    print("Hello")
        

런타임 오류 (Runtime Errors):

이러한 오류는 프로그램 실행 중에 발생하고, 소수가 되지 않는 숫자로 나누거나, 존재하지 않는 리스트 인덱스에 접근하거나, 데이터 타입을 잘못 사용하는 등 여러 가지 이유로 발생할 수 있어.


print(1 / 0)  # ZeroDivisionError
        

논리 오류:

이러한 오류는 프로그램이 실패 없이 작동하지만, 프로그램 논리의 오류로 인해 잘못된 결과를 출력할 때 발생해. 논리 오류는 예외를 발생시키지 않아서 디버깅하기가 더 어려워.

논리 오류는 보통 버그라고 불려 — 이건 프로그램 기능의 부족함 같은 거지. 반면에 런타임 오류는 예외라고 불려. 이러한 각 오류에 대해 Python은 특별한 객체(예외)를 만들고 프로그램으로 "던져"...

1.2 예외의 경로

Python에서 예외가 발생하면 호출 스택을 따라 올라가면서 처리될 때까지 기다려. 호출 스택은 예외가 발생할 때까지 호출된 함수들의 순서야.

예외 발생 메커니즘

  • 예외 발생: 오류가 발생하면 Python은 예외 객체를 생성해.
  • 예외 처리기 탐색: Python 인터프리터는 현재 코드 블록에서 예외 처리기를 찾기 시작해. 처리기를 찾지 못하면, 다음 호출한 코드 블록으로 넘어가.
  • 스택을 따라 예외 상승: 이 과정은 처리기를 찾거나 호출 스택이 소진될 때까지 반복돼.
  • 프로그램 종료: 처리기를 찾지 못하면, 프로그램은 종료되고 오류 메시지를 출력해.

예제:


def func_a():
    func_b()
        
def func_b():
    func_c()
        
def func_c():
    print(1 / 0)  # 여기서 ZeroDivisionError 예외가 발생해
        
func_a()
        

이 예제에서 ZeroDivisionError 예외는 func_c에서 발생하고, func_bfunc_a를 통해 호출 스택을 따라 올라가. 처리기가 어디에도 없으면 프로그램은 오류와 함께 종료될 거야.

1.3 로그 읽기

프로그램이 처리되지 않은 예외 때문에 종료되면, Python은 트레이스백(traceback)을 출력해서 개발자가 무엇이 잘못되었는지 이해할 수 있게 도와줘. 트레이스백에는 예외가 발생한 함수 호출의 순서 정보가 포함되어 있어서 프로그램을 디버깅하는데 분석할 수 있어.

트레이스백 예제


Traceback (most recent call last):
    File "example.py", line 10, in 
        func_a()
File "example.py", line 2, in func_a
    func_b()
File "example.py", line 5, in func_b
    func_c()
File "example.py", line 8, in func_c
    print(1 / 0)
ZeroDivisionError: division by zero

트레이스백 분석

  • 예외 유형과 메시지: 트레이스백의 끝에 예외 유형과 메시지가 표시돼. 예를 들어, ZeroDivisionError: division by zero 같은 경우야.
  • 호출 순서: 트레이스백은 함수 호출의 순서를 보여줘. 예제에서는 오류가 func_cprint(1 / 0) 줄에서 발생했고, 이것은 func_b에서 호출되었으며, func_a에서 다시 호출됐어.
  • 파일과 코드 줄: 트레이스백의 각 줄에는 호출이 발생한 파일과 줄 번호가 표시돼. 이것은 코드를 빠르게 찾아서 오류를 수정하는 데 도움을 줘.

트레이스백의 실용적 사용

트레이스백은 프로그램을 디버깅하고 분석하는 데 중요한 도구야. 개발자가 오류의 원인을 이해하고, 발생한 코드 위치를 찾도록 도와줘. 아래는 트레이스백을 사용하는 몇 가지 팁이야:

  1. 아래에서 위로 읽기: 트레이스백 분석을 시작할 때 가장 아래에 있는 호출부터 시작해, 왜냐면 거기가 예외가 발생한 장소거든.
  2. 모든 호출 확인: 트레이스백의 모든 호출을 검사해서 예외가 전달된 경로를 이해해봐.
  3. 코드 수정: 트레이스백 정보를 사용해서 코드를 수정하고 비슷한 오류가 발생하지 않도록 예방해.

예외에 대해 더 자세한 내용은 다음 강의에서 배울 거야.

코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION