내가 다른 파일 my_file.py
에서 내 파일 decorators.py
파이썬 예외가 발생한 실제 행 번호를 얻는 방법은 무엇입니까?
def catch_exceptions(function): #Line #1
@wraps(function) #Line #2
def decorator(*args, **kwargs): #Line #3
try: #Line #4
return function(*args, **kwargs) #Line #5
except Exception as e: #Line #6
exc_type, exc_obj, exc_tb = sys.exc_info() #Line #7
fname = os.path.split(exc_tb.tb_frame.f_code.co_filename)[1] #Line #8
print "E=%s, F=%s, L=%s" % (str(e), fname, exc_tb.tb_lineno) #Line #9
return decorator #Line #10
에서 다음 파이썬 장식을 가지고,이 같은 catch_exceptions
장식을 사용
from decorators import catch_exceptions #Line #1
@catch_exceptions #Line #2
def my_method() #Line #3
print (10/0 - 5/0) #Line #4
내가 그것을 실행하면, 나는 다음과 같은 출력을 얻을 :
E=integer division or modulo by zero, F=decorators.py, L=5
예외 위치 대신 decorators.py
, line # 5, 예외가 원래 발생한 실제 파일과 행 번호를보고하려면 어떻게해야합니까? 그것은 my_file.py
의 4 번 줄입니다.
예. 이 작품! 참고로, traceback.extract_tb (exc_tb) 목록의 마지막 요소를 선택하는 것이 더 좋습니다. 이 데코레이터는 메소드와 연관된 데코레이터 스택에 나타날 수 있습니다. 나는 그에 따라 당신의 대답에 편집을 게시했다. –
@SaqibAli yeap, 그게 더 낫 네 덕분에 편집을 승인했지만 _last_, _second_, _first_와 같은 단어도 처리해야하므로 다른 편집을 적용했다. 그것은 도움이 된 것을 기쁘게 생각합니다! –