Python C API : 예외의 문자열 표현을 얻는 방법은 무엇입니까?
-
05-07-2019 - |
문제
내가한다면 (예 :
open("/snafu/fnord")
Python (및 파일이 존재하지 않음)에서는 추적 및 메시지가 표시됩니다.
IOError: [Errno 2] No such file or directory: '/snafu/fnord'
Python의 C API (예 : C 프로그램에 포함 된 Python 통역사)와 함께 위의 문자열을 얻고 싶습니다. 콘솔에 출력하지 않고 문자열로 필요합니다.
와 함께 PyErr_Fetch()
예외와 값의 유형 객체를 얻을 수 있습니다. 위의 예에서 값은 튜플입니다.
(2, 'No such file or directory', '/snafu/fnord')
내가 얻은 정보에서 쉬운 방법이 있습니까? PyErr_Fetch()
문자열에 Python 통역사가 표시됩니까? (각 예외 유형에 대해 그러한 문자열을 구성하는 데 포함되지 않는 하나는 직접 유형입니다.)
해결책
Python 예외는 예외 인스턴스에서 "str ()"를 실행하여 인쇄된다고 생각합니다.이 인스턴스는 관심있는 형식의 문자열을 반환합니다. PyObject_Str()
여기에 설명 된 방법 :
https://docs.python.org/c-api/object.html
행운을 빕니다!
업데이트: 두 번째 요소가 왜 당신에게 반환되는지 약간 혼란 스러워요 PyErr_Fetch()
문자열입니다. 내 생각에 당신은 "정규화되지 않은 예외"를 받고 있으며 PyErr_NormalizeException()
그 튜플을 원하는 것처럼 문자열로 형식화 할 수있는 "실제"예외로 바꾸려면.
제휴하지 않습니다 StackOverflow