본문 바로가기
파이썬/기초문법

Python Exception 발생시 해당 소스, 라인 출력하기

by 행복론자 2020. 3. 3.

Python Exception 발생시 해당 소스, 라인 출력하기 

 

예외처리(try-except)를 하지 않고 에러가 발생하는 경우에는 어느 라인이 문제가 되었는지 바로 나옵니다.

하지만 예외처리를 핸들링한 경우 에러는 처리하되 어디서 문제가 되었는지는 찾기 어려울 수도 있습니다.

 

예를 들어 아래 소스의 경우는 누가 봐도 try에서 실행하는 4/0 이 부분이 문제가 됩니다.

try:		
    if 4/0:
    	print('success')
     else:
     	print('fail')
except Exception as e:
    print(e) # division by zero

 

 

하지만 프로그램이 다른 프로그램을 호출하는 경우 또는 한 프로그램이 몇 천 라인이 넘는 경우에는

위처럼 직관적으로 저기가 문제다. 라고 찾기 어려울 수도 있습니다. 

 

예를 들어 A에서 B 함수를 호출하는 경우를 보겠습니다. 

 

A - caller.py

from callee import *

try:
    callee_method1() 
    callee_method2()
except Exception as e:
    print(e)

 

 

B - callee.py

def callee_method1():
    print(4/0)

def callee_method2():
    print(1/5)

 

 

caller.py에서 예외를 잘 잡긴 하나 어느 라인이 문제인지는 나오지 않습니다.

이 때 예외 발생 부분을 제일 심플하게 알아볼 수 있는 방법이 traceback 패키지 사용입니다.

반응형

traceback를 추가해 caller.py를 살펴보면

from callee import *
import traceback

try:
    callee_method1()
    callee_method2()
except Exception as e:
    print(traceback.format_exc())

 

 

예외처리는 당연하고 예외 발생 지점을 정확히 출력합니다.

아래는 수행 결과입니다.

Traceback (most recent call last):
  File "C:/Users/PycharmProjects/TestProject/caller.py", line 5, in <module>
    callee_method1()
  File "C:\Users\PycharmProjects\TestProject\callee.py", line 2, in callee_method1
    print(4/0)
ZeroDivisionError: division by zero

 

 

traceback 사용말고 sys 패키지를 사용해 정보를 언패킹하는 방법도 있습니다.

sys 패키지 사용 링크도 첨부합니다.

https://stackoverflow.com/questions/1278705/when-i-catch-an-exception-how-do-i-get-the-type-file-and-line-number

 

When I catch an exception, how do I get the type, file, and line number?

Catching an exception that would print like this: Traceback (most recent call last): File "c:/tmp.py", line 1, in 4 / 0 ZeroDivisionError: integer division or modulo by zero ...

stackoverflow.com


같이 읽어보면 좋은 글

2022.12.27 - [파이썬/가상화폐] - [전자책] 바이낸스 코인선물자동매매 시스템 개발 방법을 담은 책이 출시되었습니다.

 

[전자책] 바이낸스 코인선물자동매매 시스템 개발 방법을 담은 책이 출시되었습니다.

🎁 바이낸스 자동매매 시스템 개발 방법을 담은 책이 출시되었습니다. "나 대신 일해주는 코인선물자동매매 프로그램 개발, 노하우 및 소스를 모두 공개합니다" ✔️ Q: 무슨 내용인가요? Python

jsp-dev.tistory.com

 

2022.11.05 - [파이썬/가상화폐] - [공지] 코인거래소별 프리미엄 체크봇 개발 가이드와 풀소스 전자책 | binance bybit | 업비트 김치프리미엄

 

[공지] 코인거래소별 프리미엄 체크봇 개발 가이드와 풀소스 전자책 | binance bybit | 업비트 김치프

https://kmong.com/gig/417785 거래소별 코인 프리미엄 알림봇 개발 가이드를 드립니다 | 36000원부터 시작 가능한 총 평점 5점의 3개 총 작업 개수 완료한 총 평점 5점인 JSDEV의 전자책, 투잡·재테크 전자

jsp-dev.tistory.com

 

반응형

'파이썬 > 기초문법' 카테고리의 다른 글

Python Mutable vs Immutable / Mutable / Immutable  (0) 2020.03.16
Python 클래스에 대해 1  (0) 2020.03.15
Python Map에 대한 이해  (1) 2020.02.14
Python ==과 is의 차이  (0) 2020.02.12
Relative imports in Python 3  (0) 2020.02.02
이 포스팅은 쿠팡파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

댓글