2012-11-01 55 views
7

Tôi có một vấn đề với Cython 0.17.1Tuyên truyền C++ ngoại lệ cho Cython - python ngoại lệ

chức năng My ném một std::runtime_error nếu một tập tin không tồn tại, tôi muốn tuyên truyền ngoại lệ này ở một số cách để tôi Mã Cython.

void loadFile(const string &filename) 
{ 
    // some code, if filename doesn't exists 
    throw std::runtime_error(std::string("File doesn't exists")); 
} 

và từ Cython sau khi gói đúng của hàm:

try: 
    loadFile(myfilename) 
except RuntimeError: 
    print "Can't load file" 

nhưng ngoại lệ này luôn được bỏ qua, làm thế nào tôi có thể bắt C++ ngoại lệ từ Python?

+0

Bạn có sử dụng [ 'trừ +' ] (http://docs.cython.org/src/userguide/wrapping_CPlusPlus.html#exceptions) trong 'cdef' của bạn? – user4815162342

+0

vâng, có lẽ tôi nên đăng một số mã khác ... – linello

+0

Bạn có chắc chắn là ngoại lệ được ném vào bên C++ không? Bạn cũng có thể thử thay thế 'ngoại trừ RuntimeError' bằng' ngoại trừ ngoại lệ, e' và in 'e' để xem có thể một số ngoại lệ Python khác được nâng lên hay không. – user4815162342

Trả lời

2

Bạn có đang khai báo xử lý ngoại lệ với extern không? Bạn nên đọc về C++ xử lý ngoại lệ: http://docs.cython.org/src/userguide/wrapping_CPlusPlus.html#exceptions

Về cơ bản, bạn cần phải làm điều gì đó như sau:

cdef extern from "some_file.h": 
    cdef int foo() except + 
+0

Có chức năng của tôi có "ngoại trừ +" tuyên bố nhưng tôi vẫn không thể phát hiện ngoại lệ. – linello