2014-11-13 3 views
1

의 인스턴스를 던지는 후 호출 종료 나는 C++로로드되고 main.py가있다부스트 파이썬 오류 메시지가 : '부스트 :: 파이썬 :: error_already_set'

void runscript (std::string script) 
{ 
    try { 
     PyRun_SimpleStringFlags (script.c_str() ,NULL); 
    } 
    catch (const boost::python::error_already_set&) { 
     std::cout<<"test error"<<std::endl; 
    } 
} 

으로 운영하는 main.py가 라인 :

import test 

(test.py 임)
main.py. 내부 동일한 폴더에 test.py 나는 내가 가진 어떤 오류 CACH 수 없다는 오류와 응용 프로그램 충돌이있는 경우 :

가 '부스트 :: 파이썬 :: error_already_set'의 인스턴스를 던지는 후 호출 종료를

캐시하는 방법은 무엇입니까 어떤 파일이나 어떤 라인에 오류가 있습니까?

+0

응용 프로그램이 충돌 할 때 스택 추적을 보려면 디버거를 사용하십시오. –

답변

0

대신 eval 또는 exec을 사용할 수 있습니다 (doc reference).

try { 
    bp::exec(script); 
} 
catch (bp::error_already_set) { 
} 

실제 문제는 예외 개체에서 오류 정보를 가져 오는 중입니다.

PyErr_Print()에서 catch 블록까지 stdout 예외를 인쇄하기는 쉽지만, 더 복잡한 분석이 필요하면 코드가 복잡해집니다.

블록에서 PyErr_Fetch으로 예외 정보를 얻고, PyErr_NormalizeException으로 정규화하고, 역 추적 개체를 반복하여 호출 스택을 분석해야합니다.