Fehler bei Laden einer Datei in ein Image abfangen?

Plattformunabhängige GUIs mit wxWidgets.
Antworten
maprie
User
Beiträge: 8
Registriert: Dienstag 13. Juni 2006, 22:51

Freitag 23. November 2007, 01:11

Hi,

ich möchte ein Image aus einer Datei laden, am liebsten über wx.Image::LoadFile(). Sollte die Datei fehlerhaft sein, soll der Fehler abgefangen werden. So wie es aussieht gibt ::LoadFile() aber nur per bool zurück, ob es die Datei gibt oder nicht. Fehler bei den Imagehandlern (passenden Imagehandler nicht gefunden oder Fehler bei einlesen der Datei) werden ins log geschrieben. Standardmäßig erscheint dann ein Benachrichtigungsfenster. Aber auf genau diese Fehler möchte ich reagieren.
Denn dummerweise werden die Dateien auch dann als Image geladen, wenn kein passender Imagehandler gefunden wurde! Dazu gibt image.IsOk() auch noch True zurück. Klar, denn irgendwelche Daten sind vorhanden, aber leider nur unbrauchbare. Bei dem nächsten Aufruf einer Methode von Image krachts dann.

Gibt es eine normale Möglichkeit diese Fehler abzufangen oder muss ich irgendwie das Logging zur Fehlerbehandlung missbrauchen?

- maprie

Edit: Der bug sitzt vor dem Monitor!
Zuletzt geändert von maprie am Samstag 24. November 2007, 00:23, insgesamt 1-mal geändert.
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Freitag 23. November 2007, 02:27

Versuch mal, wx.Log.OnLog entsprechend zu überschreiben.
MfG
HWK
maprie
User
Beiträge: 8
Registriert: Dienstag 13. Juni 2006, 22:51

Samstag 24. November 2007, 00:53

Danke für den Tip, aber wx.Image::LoadFile() gibt doch False bei Fehlschlag zurück und Image.IsOK() auch. :oops: Ich habe die ganze Zeit an der falschen Stelle rumgedoktert... :oops: :oops: :oops:
Jedenfalls habe ich mich ein bisschen mit dem Logging beschäftigt. Ich möchte alle Ausgaben auf Stderr ausgeben:

Code: Alles auswählen

...
logTarget = wx.LogStderr()
wx.Log_SetActiveTarget( logTarget )
...
Leider erscheinen immernoch die Benachrichtigungsfenster für die fehlgeschlagenen Imagehandler. Woran kann das liegen? Allgemein ist die Anleitung für die Anwendung des Loggings recht dürftig.
Und bei

Code: Alles auswählen

...
logTarget = wx.LogGui()
wx.Log_SetActiveTarget( logTarget )
...
stürzt Python in wxbase28uh_vc.dll ab.
Antworten