전문적으로 Python으로 개발하지 않더라도 Python으로 이것저것 개발하거나 혹은 인터넷이나 Github상에서 다운로드한 소스코드를 동작해야 할 일이 꽤 많을 것이다. 그럴때 아래와 같이 잘 예외 처리가 된 코드를 보았다고 생각해 보자..
lineList = []
try:
f = open(fileName, 'r', encoding='latin-1')
except IOError:
print("[!] Could not open file " + fileName)
exit(1)
except:
print("[!] Could not access file " + fileName)
exit(1)
for line in f.readlines():
newLine = line.replace('\n', '')
lineList.append(newLine)
단지 파일의 내용을 읽은 다음 단순히 리스트에 하나씩 넣어주는 단순한 코드 이다.
근대 위의 코드를 실행해 보면 아래와 같이 에러가 난다.
[!] Could not access file ./usernames.txt
예외처리가 되어 있어 아무런 에러 메시지가 나지 않는다. 제일 쉬운 에러 메시지를 보는 방법은 try, except를 모두 제거 해버리면 된다. 그러나 열심히 짜둔 코드를 에러 하나 보겠다고 즉 Stack Trace 하나 하겠다고 지우고 다시 짜기엔 귀차니즘이 용납하지 않는다. 이럴때 에러 로깅을 한가지 넣어서 해결 해 보자.
아래와 같이 코드를 수정한다.
import traceback
lineList = []
try:
f = open(fileName, 'r', encoding='latin-1')
except IOError:
print("[!] Could not open file " + fileName)
traceback.print_stack()
traceback.print_exc()
exit(1)
except:
print("[!] Could not access file " + fileName)
traceback.print_stack()
traceback.print_exc()
exit(1)
for line in f.readlines():
newLine = line.replace('\n', '')
lineList.append(newLine)
위와 같이 변경하고 나면 아래와 같이 encoding이 잘못된 키워드로 함수내에 정의되었다는 에러 메시지를 볼수 있다.
TypeError: 'encoding' is an invalid keyword argument for this function
위에서 사용한 traceback은 python상에서 위와 같이 예외처리등이 수행된 상태에서 Stack Trace를 출력하기에 상당히 유용한 모듈이다. 상세한 설명은 아래의 링크를 참고하기 바란다.
https://docs.python.org/2/library/traceback.html
This module provides a standard interface to extract, format and print stack traces of Python programs. It exactly mimics the behavior of the Python interpreter when it prints a stack trace. This is useful when you want to print stack traces under program control, such as in a “wrapper” around the interpreter
'개발 일반' 카테고리의 다른 글
Go로 만드는 Slack Bot (0) | 2022.06.04 |
---|---|
GO 언어 기본 정리 (0) | 2022.02.20 |
Go 웹서버 만들기 (0) | 2022.02.02 |
Python 오늘 날짜 구하기, 날짜 사이 간격 구하기 (0) | 2020.04.06 |
PyCharm 가상 개발 환경 windows to Linux (0) | 2020.03.22 |