Ich verwende swig, um eine Klasse aus einer C++ - Bibliothek mit Python zu umhüllen. Es funktioniert insgesamt, aber es gibt eine Ausnahme, die aus der Bibliothek geworfen wird, und ich kann nicht scheinen, es in der swig-Schnittstelle zu fangen, so stürzt es nur die Python-Anwendung ab!Keine Ausnahme möglich!
Die Klasse PyMonitor.cc beschreibt die Swig-Schnittstelle zur gewünschten Klasse, Monitor. Der Monitor-Konstruktor löst eine Ausnahme aus, wenn keine Verbindung hergestellt werden kann. Ich mag diese Ausnahme in PyMonitor zu handhaben, zB:
PyMonitor.cc:
#include "Monitor.h"
// ...
bool PyMonitor::connect() {
try {
_monitor = new Monitor(_host, _calibration);
} catch (...) {
printf("oops!\n");
}
}
// ...
jedoch die Methode connect() fängt nie die Ausnahme, bekomme ich nur ein „nach dem Werfen genannt beenden. .. "Fehler, und das Programm bricht ab.
Ich weiß nicht zu viel über swig, aber es scheint mir, dass dies alles in Ordnung C++ ist und die Ausnahme sollte die connect() -Methode propagieren, bevor das Programm zu töten.
Irgendwelche Gedanken?
Sind Sie sicher, dass Ihre Verbindungsmethode überhaupt eingegeben wurde? Sie können Ihren Code debuggen und ihn im Debugger einzeln ausführen. Das sollte dir zeigen, wo das Problem liegt. – lothar
Ja, die connect-Methode ist definitiv eingegeben, ich habe sie im obigen Code weggelassen, aber es gibt printf's und fflush (stdout) 's im try-Block vor und nach der Zuweisung zu _monitor. Die vorherige wird gedruckt, aber die Exception wird vom Monitor-Konstruktor ausgegeben und es gibt keine Ausgabe von der zweiten. Bezüglich Debugging, haben Sie irgendwelche Hinweise dafür? Da der eigentliche Python-Code diese Methoden aufruft, weiß ich in diesem Fall nicht viel über Debugging. Funktionieren die grundlegenden gdb-Tricks? – chase
Vielleicht fängt der Monitor-Konstruktor die Ausnahme ab und beendet die Laufzeit intern ...? – harto