2023년 6월 업데이트

 

안녕하세요. SQLER의 코난 김대우입니다. 

이번 강좌에서는, Python 초급 강좌 목차 -7. 에러 핸들링(Error Handling)을 진행토록 하겠습니다.

 

SQLER에서 진행되는 전체 Python / 머신러닝 강좌 목록

 

코드를 실행하기 위해서는, vscode에서 새로운 파일을 만들고 실행하시면 됩니다.

예를 들어, 07_handle_error.py를 생성하고 코드를 실행합니다.

 

 

TL;DR

에러(Error)는 구문 오류, 런타임 오류, 로직 오류의 세 가지 유형이 있습니다. Try/except/finally 블록으로 에러를 핸들링 하는 가이드와, 디버깅을 잘 하기 위한 stack trace 보는 방법, 코드 검토 절차 등을 설명하고, 프로젝트에서 에러 핸들링 방법에 대한 팁을 이 챕터에서 안내합니다.
 

 

Python 초급 강좌 목차 - 7. 에러 핸들링(Error Handling)

 

 

에러(error)는 다양한 개발 상황에서 발생합니다. 에러는 발생 안 할 수가 없죠. 그래서 무엇보다도, 이런 에러를 잘 핸들 하는 게 중요합니다. 

 

에러의 타입은 세 가지 종류가 존재

구문에러(Syntax error), 런타임 에러(Runtime error), 로직 에러(Logic error)가 있습니다.

Slide3.JPG

 

구문에러(Syntax error)

구문에러는 코드가 아예 실행되지 않습니다. 예를 들어, 아래와 같은 경우입니다.

#구문에러(syntax error) 코드
x = 42
y = 206
if x == y
    print('Success')

이 코드는 4번 줄의 if 구문 맨 뒤에 콜론-":" 기호가 없어서 오류를 발생시킵니다. 이런 syntax 오류는 Python과 같은 실행기가 대부분의 경우 잘 알려주고, 쉽게 해결 가능합니다.

 

런타임 에러(Runtime error)

런타임에러는 실행 중에 발생하는 에러입니다.

x = 42
y = 0

print(x / y)

예를 들어, 이 코드는 Division by zero 에러 발생 시킵니다.

 

이런 런타임시에 발생하는 에러핸들링이 필요합니다. 예를 들어, 이런 식으로 코딩할 수 있습니다.

x = 42
y = 0

try:
    print(x / y)
except ZeroDivisionError as e:
    # 선택 항목으로, "e" 값을 어딘가에 로깅합니다.
    print('Sorry, something went wrong')
except:
    print('Something really went wrong')
finally:
    print('This always runs on success or failure')

실행하면, 에러가 핸들 되어 'Sorry, something went wrong' 메시지가 출력됩니다.

 

try / except / finally 사용

이 에러 핸들링은 버그를 찾는 용도로 사용되지 않습니다. 에러를 처리하는 데 사용되며, 버그를 찾기 위해서는 디버깅 과정을 수행해야 합니다. 

모든 오류를 catch 할 필요는 없습니다. 위 코드의 9번 라인처럼, 핸들 가능한 오류를 핸들하고 그렇지 않은 오류는 이렇게 catch 하여, 기록해 이후 디버깅에 활용하면 됩니다.

 

로직에러(Logic error)

에러를 발생하지 않지만, 의도치 않게 동작하는 경우를 의미합니다. 

아래의 코드와 같이 x는 y보다 크지만, if 구문에서 작음으로 비교해 if구문 안쪽 블록을 수행하지 않습니다.

x = 206
y = 42
if x < y:
    print(str(x) + ' is greater than ' + str(y))

이런 경우 개발자의 논리 오류로 해당 블록이나 코드가 처리되지 않는 등의 로직에러 원인을 파악해야 합니다.

 

잘못 작성된 코드를 파악하는 절차

  •  stack trace 보는 방법
    •   마지막 호출이 최상단에 위치
    •   대부분의 경우 개발자의 코드는 맨 아래쪽에 위치
    •   오류가 발생한 줄 번호(line number)를 잘 확인해서 해결
  • 코드의 오류 찾는 방법
    • 다시 코드를 잘 살펴볼 것
    • 함수나 클래스의 문서를 다시 확인
    • 인터넷 검색
    • 잠시 쉬었다가 다시 해보세요
    • 누군가에게 도움을 요청하는 것도 한 방법

 

에러 처리에 대한 몇 가지 팁

  • 모든 코드 블록에 try/catch를 걸지 마세요. 외부 서비스나, DB 연결 부분과 같은 가능성 높은 부분을 우선적으로 처리하세요.
  • 변수나 object 선언/매핑에서는 걸지 않습니다.
  • except 객체의 오류 메시지는 가능한 모두 남기세요. - call stack 등 메시지는 이후 디버깅에 큰 도움이 됩니다.
  • 패키지나 프레임워크의 버그를 만날 가능성은 로또 맞는 것처럼 희박합니다. 나의 코드를 항상 먼저 의심하고 살펴보세요.
  • 런타임 에러와 로직에러를 피하는 가장 가성비 좋은 방법은 linting과 unit test입니다. 항상 테스트 코드를 작성하고, 자동화된 test를 통과해야만 branch에 merge 되는 규칙을 리포지토리의 코드 branch에 걸어두세요.(이후 팁으로 한번 더 풀어볼게요.)

 

☑️ 챗GPT 활용: python linting과 unit test에 대해서 알려줘

 

수고 많으셨어요. 다음 강좌에서 뵙겠습니다.

 

참고자료

8. Compound statements — Python 3.7.9 documentation

Built-in Exceptions — Python 3.7.9 documentation

개발자 커뮤니티 SQLER.com - Python 무료 강좌 - 기초, 중급, 머신러닝

c9-python-getting-started/python-for-beginners/07 - Error handling at master · CloudBreadPaPa/c9-python-getting-started (github.com)

 

파이썬 강좌 책 구매

강좌가 도움이 되셨다면, 책으로 구매 가능합니다. 책 판매 수익금은 전액 코딩 교육 사회공헌 활동에 기부되며, 아래 링크에서 구매하시면 더 많은 금액이 기부됩니다. 

 

책구매 링크: 챗GPT와 함께하는 파이썬 & 머신러닝 코딩 마스터 

파이썬-책구매링크.png

No. Subject Author Date Views
Notice SQL강좌: 챗GPT와 함께 배우는 SQL Server 무료 강좌 목차와 소개 (2023년 9월 업데이트) 코난(김대우) 2023.08.18 34024
Notice Python 무료 강좌 - 기초, 중급, 머신러닝(2023년 6월 업데이트) 코난(김대우) 2021.01.01 17169
98 Python 중급 강좌 - 4. 상속(Inheritance) 코난(김대우) 2021.01.03 283
97 Python 중급 강좌 - 3. 클래스(Class) 코난(김대우) 2021.01.03 327
96 Python 중급 강좌 - 2. 람다(Lamda) file 코난(김대우) 2021.01.03 461
95 Python 중급 강좌 - 1. Python 스타일 가이드: 서식(Formatting)과 린팅(Linting) file 코난(김대우) 2021.01.02 1030
94 Python 초급 강좌 목차 - 19. 코드에서 중요한 키(패스워드) 관리 - dotenv 코난(김대우) 2021.01.02 911
93 Python 초급 강좌 목차 - 18. 데코레이터(Decorators) 코난(김대우) 2021.01.02 284
92 Python 초급 강좌 목차 - 17. JSON 데이터 처리 file 코난(김대우) 2021.01.02 757
91 Python 초급 강좌 목차 - 16. 외부 웹서비스 API 호출 file 코난(김대우) 2021.01.02 917
90 Python 초급 강좌 목차 - 15. 패키지(Package): import, pip 코난(김대우) 2021.01.02 340
89 Python 초급 강좌 목차 - 14. 함수 파라미터(Parameter) 코난(김대우) 2021.01.02 279
88 Python 초급 강좌 목차 - 13. 함수(Function) 코난(김대우) 2021.01.02 475
87 Python 초급 강좌 목차 - 12. 반복문(Loop): for, while 코난(김대우) 2021.01.02 278
86 Python 초급 강좌 목차 - 11. 컬렉션(Collection): list, array, dictionary file 코난(김대우) 2021.01.02 317
85 Python 초급 강좌 목차 - 10. 조건문(Condition):3 복잡한 조건 처리 코난(김대우) 2021.01.01 274
84 Python 초급 강좌 목차 - 9. 조건문(Condition):2 다중 조건 처리 코난(김대우) 2021.01.01 317
83 Python 초급 강좌 목차 - 8. 조건문(Condition):1 (IF-ELSE) 코난(김대우) 2021.01.01 299
» Python 초급 강좌 목차 - 7. 에러 핸들링(Error Handling) file 코난(김대우) 2021.01.01 331
81 Python 초급 강좌 목차 - 6. 날짜와 시간 데이터 처리 코난(김대우) 2021.01.01 354
80 Python 초급 강좌 목차 - 5. 숫자(Numeric) 데이터 처리 코난(김대우) 2021.01.01 288
79 Python 초급 강좌 목차 - 4. 문자열(String) 데이터 처리 코난(김대우) 2021.01.01 371





XE Login