[Python] 19. 예외처리(Exception Handling)

2023. 11. 7. 02:59·Programming Language(Sub)/Python
목차
  1. Exception
  2. 오류 예외 처리 기법
  3. 오류 일부러 발생시키기
  4. 예외 만들기

예외처리(Exception Handling)


Exception


  • 프로그램 실행 중 특별한 처리가 필요한 변칙적이거나 예외적인 조건

  • 파이썬에는 많은 Bulit-in Exception 들이 존재함

  • ex) 0으로 나누는 경우

    ex) 없는 파일을 'r' 모드로 읽으려고 하는 경우

  • 이러한 예외 상황을 다루기 위해 Exception Handling을 해준다

오류 예외 처리 기법


try.except문

  • try 블록 수행 중 오류가 발생하면, except블록 실행.

  • try 블록 수행 중 오류가 발생하지 않으면, except 블록 실행 X

    try:
        ...
    except [발생 오류 [as 오류 메시지 변수]]:
        ...
    • []기호는 괄호 안의 내용을 생략할 수 있다는 관례 표시
  • except 구문을 사용하는 3가지 방법

    1. try, except 만 사용

      try:
         ....
      except:
         ....
    2. 발생 오류만 초함한 except문

      try:
         ....
      except 발생오류:
         ....
    3. 발생 오류와 오류 메시지 변수까지 포함한 except문

      try:
         ....
      except 발생 오류 as 오류 메시지 변수:
         ....
    • example
    try:
        4 / 0
    except ZeroDivisionError as e:
        print(e)
    a = [1, 2]
    try:
        a[3]
    except IndexError as e:
        print(e)
  • try ... finally

    • try문에는 finally 절을 사용할 수 있음

    • finally문은 예외 발생 여부 상관없이 항상 수행

    • 리소스를 close할 때 많이 사용 (아래 예시처럼)

      f = open('foo.txt', 'w')
      try:
          # 무언가를 수행
      finally:
          f.close()
  • 여러개의 오류 처리하기

    try:
        ....
    except 발생오류 1:
        ....
    except 발생오류 2:
        ....
    • example

      try:
          a = [1, 2]
          print(a[3])
          4 / 0
      except ZeroDivisionError:
          print("Can't Divide by Zero.")
      except IndexError:
          print("Can't Indexing.")
      --> 인덱싱 오류가 먼저 발생하므로 ZeroDivisionError에 해당하는 오류가 발생하지 않음
      try:
          a = [1, 2]
          print(a[3])
          4 / 0
      except ZeroDivisionError as e:
          print(e)
      except IndexError as e:
          print(e)
      try:
          a = [1, 2]
          print(a[3])
          4 / 0
      except (ZeroDivisionError, IndexError) as e:
          print(e)
      --> 2개 이상의 오류를 동시에 처리하기 위해서는 위와 같이 packing을 통해 처리한다.

오류 일부러 발생시키기

  • raise 명령어 사용

    class Bird:
        def fly(self):
            raise NotImplementedError
    
    class Eagle(Bird):
        pass
    
    eagle = Eagle()
    eagle.fly() # NotImplemented Error 발생

예외 만들기

  • 특수한 경우에만 예외 처리를 하기 위해 예외를 만들어서 사용하기도 함

  • example

    class MyError(Exception):
        pass
    
    def say_nick(nick):
        if nick == '바보':
            raise MyError()
        print(nick)
    
    say_nick("바보") # 오류 발생
    • 여기서 Exception은 Built-in 클래스
    # 위 예시에서 예외처리 기법 사용
    try:
        say_nick("천사")
        say_nick("바보")
    except MyError:
        print("허용되지 않는 별명입니다.")
    
    res :
    천사
    허용되지 않는 별명입니다.
    # 위 예시에서 예외처리 기법 사용
    try:
        say_nick("천사")
        say_nick("바보")
    except MyError as e:
        print(e) # 오류 메시지가 출력되지 않음
    • Exception 클래스를 상속받은 MyError 클래스가 어떤 오류인지 모름

    • print(e)로 오류메시지를 보이게 하려면 오류 클래스에 __str__ 메서드를 구현해야 함.

    class MyError(Exception):
        def __str__(self):
            return "허용되지 않는 별명입니다."

참조) Do it! 점프 투 파이썬 (박응용 지음)

'Programming Language(Sub) > Python' 카테고리의 다른 글

[Python] 21. 표준 라이브러리(Standard Library)(1)  (0) 2023.11.07
[Python] 20. 내장 함수(Built-in-function)  (0) 2023.11.07
[Python] 18. 패키지(package)  (0) 2023.11.07
[Python] 17. 모듈(module)  (0) 2023.11.07
[Python] 16. 클래스(Class), 상속(inheritance)  (0) 2023.11.06
  1. Exception
  2. 오류 예외 처리 기법
  3. 오류 일부러 발생시키기
  4. 예외 만들기
'Programming Language(Sub)/Python' 카테고리의 다른 글
  • [Python] 21. 표준 라이브러리(Standard Library)(1)
  • [Python] 20. 내장 함수(Built-in-function)
  • [Python] 18. 패키지(package)
  • [Python] 17. 모듈(module)
lumana
lumana
배움을 나누는 공간 https://github.com/bebeis
  • lumana
    Brute force Study
    lumana
  • 전체
    오늘
    어제
    • 분류 전체보기 N
      • Software Development N
        • Performance
        • TroubleShooting
        • Refactoring
        • Test N
        • Code Style, Convetion
        • DDD
        • Software Engineering
      • Java N
        • Basic
        • Core
        • Collection
        • 멀티스레드&동시성
        • IO, Network
        • Reflection, Annotation
        • Modern Java(8~) N
        • JVM N
      • Spring
        • Framework
        • MVC
        • Transaction
        • AOP
        • Boot
        • AI
      • DB Access
        • Jdbc
        • JdbcTemplate
        • JPA
        • Spring Data JPA
        • QueryDSL
      • Computer Science
        • Data Structure
        • OS
        • Database
        • Network
        • 컴퓨터구조
        • 시스템 프로그래밍
        • Algorithm
      • HTTP
      • Infra N
        • Docker N
      • 프로그래밍언어론
      • Programming Language(Sub) N
        • Kotlin N
        • Python
        • C++
        • JavaScript
      • FE
        • HTML
        • CSS
        • React
        • Application
      • Unix_Linux
        • Common
      • PS
        • BOJ
        • Tip
        • 프로그래머스
        • CodeForce
      • Book Review
        • Clean Code
      • Math
        • Linear Algebra
      • AI
        • DL
        • ML
        • DA
        • Concepts
      • 프리코스
      • Project Review
      • LegacyPosts
      • 모니터
      • Diary
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
lumana
[Python] 19. 예외처리(Exception Handling)
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.