파이썬 & 오픈소스 개발 Tip과 강좌

이곳은 파이썬과 여러 오픈소스 기반 프레임워크 관련 Tip과 강좌 게시판 입니다. 관련 개발을 진행하면서 알아내신 Tip이나 강좌와 새로운 소식을 적어 주시면 다른 공부하는 분들에게 큰 도움이 됩니다. 감사합니다. SQLER.com은 개발자와 IT전문가의 지식 나눔을 실천하기 위해 노력하고 있습니다.

안녕하세요. 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 Python 무료 강좌 - 기초, 중급, 머신러닝(2021년 1월 업데이트) 코난(김대우) 2021.01.01 322
83 Python 초급 강좌 목차 - 8. 조건문(Condition):1 (IF-ELSE) 코난(김대우) 2021.01.01 30
» Python 초급 강좌 목차 - 7. 에러 핸들링(Error Handling) file 코난(김대우) 2021.01.01 33
81 Python 초급 강좌 목차 - 6. 날짜와 시간 데이터 처리 코난(김대우) 2021.01.01 37
80 Python 초급 강좌 목차 - 5. 숫자(Numeric) 데이터 처리 코난(김대우) 2021.01.01 24
79 Python 초급 강좌 목차 - 4. 문자열(String) 데이터 처리 코난(김대우) 2021.01.01 40
78 Python 초급 강좌 목차 - 3. 주석(Comments) 코난(김대우) 2021.01.01 34
77 Python 초급 강좌 목차 - 2. Print 구문 file 코난(김대우) 2021.01.01 50
76 Python 초급 강좌 목차 - 1. Python 개발 환경 구성 file 코난(김대우) 2021.01.01 127
75 Python 초급 강좌 목차 - 0. Python 소개 file 코난(김대우) 2021.01.01 136
74 오픈소스 개발도구 - vscode 설치 (WSL 설치 포함) file 코난(김대우) 2020.12.20 69
73 지금 시작하는 개발자를 위한, 무료 Python 강좌 Top 5! file 코난(김대우) 2020.12.19 66
72 installshield 와 entityframwork 우와앙 2014.03.28 10664
71 Visual Studio Video 비디오 컨퍼런스 규니규니 2013.03.08 12791
70 Visual Studio 2012 신제품 발표회.(09/25 - 롯데호텔 잠실 3층) 쓸만한게없네(윤선식) 2012.09.24 12748
69 SqlBulkCopy 성능비교 지현명 2012.09.13 19235
68 Visual Studio 2012의 ALM(Application Life-cycle Management) 자료 [1] 코난(김대우) 2012.09.04 16511
67 기초T4Template - 간단예제와 MVC Scaffold 주석추가하기 [5] 한머리 2012.04.17 16424
66 기초 T4 template 강좌 - 자동 코딩 생성 프로그래밍 [3] 한머리 2012.04.10 18511
65 쓰레드 풀 함써보자! (쓰레드 1000마리용 쓰레드풀 만들기) Jerry 2012.03.27 27123
64 쓰레드 풀(Thread Pool) 함써보자!! [2] Jerry 2012.03.23 30283





XE Login