newhaneul

[Advanced Python Programming] Lecture 10. Exception Handling 본문

4. University Study/Advanced Python Programming

[Advanced Python Programming] Lecture 10. Exception Handling

뉴하늘 2026. 4. 17. 14:04
728x90

포스팅은 인하대학교 허혜선 교수님의 [202601-EEC3408-001] 고급파이썬프로그래밍을 수강하고 공부한 내용을 정리하기 위한 포스팅입니다.

 

 

  • Error
    • 구문 오류(Syntax Error)
    • 런타임 오류(Runtime Error) / 예외(Exception)

 

1. 조건문으로 예외 처리하기

  • .isdigit(): 숫자로만 구성된 글자인 경우 True 반환하는 함수
x = input("정수 입력: ")

if x.isdigit():
    x = int(x)
    print(x * 2)
else:
    print("정수가 아닌 경우")
    
    
정수 입력: 3
6

정수 입력: a
정수가 아닌 경우

 

 

2. try except 구문

try:
    pass
    # 예외 발생 가능 코드
except:
    pass
    # 대처 코드

 

 

3. try except else 구문

try:
    pass
    # 예외 발생 가능 코드
except:
    pass
    # 대처 코드
else:
    pass
    # 예외가 발생하지 않았을 때 실행할 코드

 

 

4. try except else finally 구문

try:
    pass
    # 예외 발생 가능 코드
except:
    pass
    # 대처 코드
else:
    pass
    # 예외가 발생하지 않았을 때 실행할 코드
finally:
    pass
    # 무조건 실행할 코드

 

  • try, except finally 구문의 조합
    • try 구문은 단독으로 사용할 수 없으며, 반드시 except 구문 또는 finally 구문과 함께 사용해야 한다.
    • else 구문은 반드시 except 구문 뒤에 사용되어야한다.
      • 1. try + except
      • 2. try + except + else
      • 3. try + except + finally
      • 4. try + except + else + finally
      • 5. try + finally

 

예제:

def test():
    print("test() 함수의 첫 줄입니다.")

    try:
        print("try 구문이 실행되었습니다.")
        return
        print("try 구문의 return 키워드 뒤입니다.")
    except:
        print("except 구문이 실행되었습니다.")
    else:
        print("else 구문이 실행되었습니다.")
    finally:
        print("finally 구문이 실행되었습니다.")
    print("test() 함수의 마지막 줄입니다.")

test()

test() 함수의 첫 줄입니다.
try 구문이 실행되었습니다.
finally 구문이 실행되었습니다.
print("프로그램이 시작되었습니다.")

while True:
    try:
        print("try 구문이 실행되었습니다.")
        break
        print("try 구문의 break 키워드 뒤입니다.")
    except:
        print("except 구문이 실행되었습니다.")
    finally:
        print("finally 구문이 실행되었습니다.")
    print("while 반복문의 마지막 줄입니다.")

print("프로그램이 종료되었습니다.")

프로그램이 시작되었습니다.
try 구문이 실행되었습니다.
finally 구문이 실행되었습니다.
프로그램이 종료되었습니다.

 

 

추가:

def tricky_test():
    print("1. 함수 시작")
    try:
        print("2. try 블록 실행")
        raise ValueError("에러 발생!")
        print("3. 에러 발생 이후")
    except ValueError:
        print("4. except 블록 실행")
        return "except에서 반환"
    else:
        print("5. else 블록 실행")
        return "else에서 반환"
    finally:
        print("6. finally 블록 실행")
        return "finally에서 반환"

result = tricky_test()
print(f"7. 최종 결과: {result}")

1. 함수 시작
2. try 블록 실행
4. except 블록 실행
6. finally 블록 실행
7. 최종 결과: finally에서 반환
def loop_test():
    print("반복문 시작")
    for i in range(3):
        try:
            print(f"try: {i}")
            if i == 1:
                continue
            if i == 2:
                break
        finally:
            print(f"finally: {i}")
    print("반복문 종료")

loop_test()

반복문 시작
try: 0
finally: 0
try: 1
finally: 1
try: 2
finally: 2
반복문 종료
def nested_try_test():
    print("1. 외부 try 시작")
    try:
        print("2. 내부 try 시작")
        try:
            print("3. 계산 시도")
            10 / 0
            print("4. 계산 완료")
        except TypeError:
            print("5. 내부 except (TypeError)")
        finally:
            print("6. 내부 finally")
    except ZeroDivisionError:
        print("7. 외부 except (ZeroDivisionError)")
    finally:
        print("8. 외부 finally")

nested_try_test()

1. 외부 try 시작
2. 내부 try 시작
3. 계산 시도
6. 내부 finally
7. 외부 except (ZeroDivisionError)
8. 외부 finally

 

 

5. 예외 구분하기

  • ValueError: 정수 아닌 값 입력하는 경우
  • IndexError: 리스트의 인덱스를 넘는 숫자를 입력하는 경우

 

  • raise 키워드: 예외를 강제로 발생시킴
728x90