개인 자료란 (JE)

  서버 커뮤니티

Profile 라고솔로가말했습니다 대표칭호 없음

SaidBySolo 8b58f951b6404b78ae3ba92d55d431f7

Profile

커뮤니티 소통 개발하기 프로그래밍

traceback.... traceback!

2020.08.23 조회 수 146 추천 수 1

프로젝트 진행중에 버그 발생시에 추적을 어케할까 생각하고있었는데

uuid와 함께 traceback을 넣고 올리면 찾기 쉽지 않을까 싶어서 코딩을 하던중에


discord.py에 on_command_error라는 이벤트가있더라고요

무턱대고 가져가서 코딩을 시작했죠


ef9f0ffcd8653faec4a71dbb01e9d7ed.png

근데 주는게.... error뿐인거에요!

아니 미친 예외로 어케 traceback을 가져오나 생각했는데

55895daaf32aac2f5ddd30cf7756ffce.pnghttps://docs.python.org/ko/3.8/library/traceback.html#traceback.format_exception 

있네....?


일단 예외에 __traceback__ 이라는 매직 메서드가 있더라고요

일단  그래서 ''.join(traceback.format_exception(type(error), error, error.__traceback__) 이렇게 지르고봤죠

리턴값이 보니까 리스트로 나오더라고요


잘되긴 잘되요! 근데!

Traceback (most recent call last):  
File "C:\Users\saidb\AppData\Local\Programs\Python\Python38\lib\site-packages\discord\ext\commands\core.py", line 83, in wrapped    
ret = await coro(*args, **kwargs)  
File "C:\Users\saidb\Documents\GitHub\sbsschoolbot\schoolbot\cogs\school\academic_schedule.py", line 15, in _academic_schedule    
await ctx.send(a) NameError: name 'a' is not defined 

The above exception was the direct cause of the following exception: 

Traceback (most recent call last):  
File "C:\Users\saidb\AppData\Local\Programs\Python\Python38\lib\site-packages\discord\ext\commands\bot.py", line 892, in invoke    
await ctx.command.invoke(ctx)  
File "C:\Users\saidb\AppData\Local\Programs\Python\Python38\lib\site-packages\discord\ext\commands\core.py", line 797, in invoke    
await injected(*ctx.args, **ctx.kwargs)  
File "C:\Users\saidb\AppData\Local\Programs\Python\Python38\lib\site-packages\discord\ext\commands\core.py", line 92, in wrapped    
raise CommandInvokeError(exc) from exc discord.ext.commands.errors.CommandInvokeError: Command raised an exception: NameError: name 'a' is not defined

이런식으로 주저리주저리 나오는거에요 제가 원하는 거긴해요,

하지만 근데 문제가 뭐냐

  1. 역추적에 도움이되지않는 문단이있음
  2. 너무김

그래서 일단 도움이 되지않는 문단을 빼기로했어요 

맨상단에 traceback만 있어도 충분히 정보가 충분하거든요

다시 파이썬 레퍼런스를 읽으러 갔죠

fb8a1bf3e0c3b22321b5a66bde620748.png

보니까 chain...? 이란게 있어서 Hoxy나 하고 False를 하고 출력을 해봤으나..

Traceback (most recent call last):  
File "C:\Users\saidb\AppData\Local\Programs\Python\Python38\lib\site-packages\discord\ext\commands\bot.py", line 892, in invoke    
await ctx.command.invoke(ctx)  
File "C:\Users\saidb\AppData\Local\Programs\Python\Python38\lib\site-packages\discord\ext\commands\core.py", line 797, in invoke    
await injected(*ctx.args, **ctx.kwargs)  
File "C:\Users\saidb\AppData\Local\Programs\Python\Python38\lib\site-packages\discord\ext\commands\core.py", line 92, in wrapped    
raise CommandInvokeError(exc) from exc discord.ext.commands.errors.CommandInvokeError: Command raised an exception: NameError: name 'a' is not defined

아니 뭔 밑에있는 traceback이 나오는거에요?

이때 부터 사람이 미쳐가기 시작했던거죠

구글신 과 스택오버플로우는 절 버리지 않겠죠 라며 검색을 돌리는데

스택오버플로우에 들갔는데 한 댓글이 눈에 띄었습니다.

a503dca32c998c3bfdff29630d207850.pnghttps://stackoverflow.com/questions/38824798/python-how-to-catch-inner-exception-of-exception-chain

__cause__ 이거다 이거면 킹능성이 보인다.

''.join(traceback.format_exception(type(error.__cause__), error.__cause__, error.__cause__.__traceback__  

바로 붙여주고 돌려보았더니!


Traceback (most recent call last): 
    File "C:\Users\saidb\AppData\Local\Programs\Python\Python38\lib\site-packages\discord\ext\commands\core.py", line 83, in wrapped
    ret = await coro(*args, **kwargs)
  File "C:\Users\saidb\Documents\GitHub\sbsschoolbot\schoolbot\cogs\school\academic_schedule.py", line 15, in _academic_schedule
    await ctx.send(a) NameError: name 'a' is not defined

!!!!!!!!!!!!!!!!!

의도한대로 나오게됬네요


이걸 전부 제가 아는대로 정리하자면


__cause__는 예외의 원인입니다. 찾아보니 직접 링크한다 하더라고요

__traceback__  는스택을 보여줍니다.


따라서 __cause__ 메서드를 활용하면서 맨처음 발생된 예외를 가져올수있었습니다.


아 만약 chain 이 없다면 __cause__가 None을 반환 하더라고요


그래서 if not error.__cause__로 저는 체인이 있는것과 없는것을 따로 분리시켜놨습니다.

혹시 자세히 알고계신분은 설명 부탁드릴게요


저도 몰라서 적어두는거라





Warning
댓글이 없습니다.

새로운 댓글을 등록해 주세요!

뉴스 및 창작물
/files/thumbnails/520/751/003/262x150.crop.jpg?20240328020349

레드스톤

마인크래프트 노트블록으로 만든 『 Bling‐Bang‐Bang‐Born 』 1

Sonttukk

2024-03-23

1

/files/thumbnails/467/742/003/262x150.crop.jpg?20240311163123

레드스톤

[노트블럭커버] MILGRAM -ミルグラム(밀그램)- / 아마네 「숙청 행진」 제 2심 2

리비온

2024-03-11

0

/files/thumbnails/846/741/003/262x150.crop.jpg?20240310221214

레드스톤

워든 vs 라마 200마리 1

GlassesFilm

2024-03-10

0

/files/thumbnails/542/739/003/262x150.crop.jpg?20240309070457

레드스톤

[고인의 명복을 빕니다][노트블럭]드래곤볼 GT 오프닝 - 점점 마음이 끌려

리비온

2024-03-09

0

/files/thumbnails/326/738/003/262x150.crop.jpg?20240328020414

레드스톤

마인크래프트 노트블록으로 만든 『 Build Our Machine 』

Sonttukk

2024-03-07

0