Błąd #4439
RelReader i RelWriter nie obsługują wyjątków
Status: | Nowy | Start date: | 23 Nov 2012 | |
---|---|---|---|---|
Priority: | Normalny | Due date: | ||
Assignee: | Łukasz B | % Done: | 0% | |
Category: | - | |||
Target version: | - |
Description
RelWriter po cichu nie robi nic, gdy pliku do zapisu nie da się otworzyć. Powinien zgłaszać wyjątek, jeśli otwarty ofs nie jest .good(). Najlepiej taki sam wyjątek jak w relreaderze (ten sam co do klasy przynajmniej, komunikat można ew. zmienić, że nie można pisać do pliku).
Drugi problem: w swigu wyjątek relreadera nie jest należycie opakowany, więc kod pytonowy się wywali i przerwie działanie bez możliwości przechwycenia takiego wyjątku. To samo dotyczyć będzie relwritera po dodaniu throwa.
Działające rozwiązanie tego problemu jest np. w tokenreader.i -- funkcje zwracające wyjątki (czyli read i write) trzeba opakować w %exception, zobacz ten tokenreader.i (w tokenwriter.i jest tak samo). Nie jest to może zbyt ładne na poziomie plików .i, ale nie udało nam się znaleźć ładniejszego rozwiązania. To jest istotne, bo bez tego opakowania lecą gołe wyjątki z C++-a, które nie są rozpoznawane jako wyjątki i nie da się ich przechwycić.
Przy okazji możesz poprawić komentarze w relwriterze, bo są wzięte żywcem z readera i wprowadzają w błąd.