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

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

 

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

 

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

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

 

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에 걸어두세요.(이후 팁으로 한번 더 풀어볼게요.)

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

 

참고자료

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)

No. Subject Author Date Views
Notice 2023년 1월 - SQLER의 업데이트 강좌 리스트 코난(김대우) 2023.01.02 2096
Notice Python 무료 강좌 - 기초, 중급, 머신러닝(2021년 1월 업데이트) 코난(김대우) 2021.01.01 1200
96 Python 중급 강좌 - 2. 람다(Lamda) file 코난(김대우) 2021.01.03 298
95 Python 중급 강좌 - 1. Python 스타일 가이드: 서식(Formatting)과 린팅(Linting) file 코난(김대우) 2021.01.02 540
94 Python 초급 강좌 목차 - 19. 코드에서 중요한 키(패드워드) 관리 - dotenv 코난(김대우) 2021.01.02 540
93 Python 초급 강좌 목차 - 18. 데코레이터(Decorators) 코난(김대우) 2021.01.02 190
92 Python 초급 강좌 목차 - 17. JSON 데이터 처리 file 코난(김대우) 2021.01.02 501
91 Python 초급 강좌 목차 - 16. 외부 웹서비스 API 호출 file 코난(김대우) 2021.01.02 613
90 Python 초급 강좌 목차 - 15. 패키지(Package): import, pip 코난(김대우) 2021.01.02 171
89 Python 초급 강좌 목차 - 14. 함수 파라미터(Parameter) 코난(김대우) 2021.01.02 169
88 Python 초급 강좌 목차 - 13. 함수(Function) 코난(김대우) 2021.01.02 237
87 Python 초급 강좌 목차 - 12. 반복문(Loop): for, while 코난(김대우) 2021.01.02 138
86 Python 초급 강좌 목차 - 11. 컬렉션(Collection): list, array, dictionary file 코난(김대우) 2021.01.02 179
85 Python 초급 강좌 목차 - 10. 조건문(Condition):3 복잡한 조건 처리 코난(김대우) 2021.01.01 154
84 Python 초급 강좌 목차 - 9. 조건문(Condition):2 다중 조건 처리 코난(김대우) 2021.01.01 177
83 Python 초급 강좌 목차 - 8. 조건문(Condition):1 (IF-ELSE) 코난(김대우) 2021.01.01 171
» Python 초급 강좌 목차 - 7. 에러 핸들링(Error Handling) file 코난(김대우) 2021.01.01 186
81 Python 초급 강좌 목차 - 6. 날짜와 시간 데이터 처리 코난(김대우) 2021.01.01 204
80 Python 초급 강좌 목차 - 5. 숫자(Numeric) 데이터 처리 코난(김대우) 2021.01.01 153
79 Python 초급 강좌 목차 - 4. 문자열(String) 데이터 처리 코난(김대우) 2021.01.01 197
78 Python 초급 강좌 목차 - 3. 주석(Comments) 코난(김대우) 2021.01.01 170
77 Python 초급 강좌 목차 - 2. Print 구문 file 코난(김대우) 2021.01.01 289





XE Login