2009-01-19 7 views
3

Je suis en train de coder le menu pour une application que j'écris en python, en utilisant des bibliothèques wxPython pour l'interface utilisateur, et j'essaye d'ajouter des icônes certains des éléments de menu. Parce que j'essaie d'être consciencieux à ce sujet, j'essaie de limiter les dégâts causés si l'un des fichiers image référencés n'existe pas, et la méthode la plus simple (dans mon esprit) est d'utiliser des exceptions.wxPython ne lance pas d'exceptions quand il le devrait, donnant plutôt des messages d'erreur bruts

Le problème est que, lorsque je lie un fichier qui n'existe pas, aucune exception n'est levée. Au lieu de cela, je reçois une boîte de message indiquant horrible:

Can't load image from <path>: Image does not exist.

Ce message est exactement le genre de chose que je suis en train d'arrêter, mais même avec la plus large, rien ne fonctionne exception déclaration attrapant.

Ceci est une version réduite, en prenant ce qui semble être pertinente, de ce que j'ai écrit:

NewProject = wx.MenuItem(File, -1, "&New Project\tCtrl+N", "Create a new project") 
try: 
    # raises an error message but not an exception 
    NewProject.SetBitmap(wx.Image(<path> ), wx.BITMAP_TYPE_PNG).ConvertToBitmap()) 
except Exception: 
    pass 

Voilà donc mes questions: Qu'est-ce que je fais mal? Est-ce que je m'approche de cela dans la mauvaise direction, en mettant trop l'accent sur les exceptions, quand il y a d'autres façons de le contourner (bien que ce ne soit pas dans ma tête pour être aussi simple)? Est-ce un bug dans la bibliothèque de wxPython, puisque je suis sûr qu'il devrait lancer une exception même si ce n'est pas la meilleure solution?

p.s. Le mieux qu'une recherche de Google puisse faire était de recommander de convertir toutes les images en code python en utilisant le module img2py fourni avec wxPython, mais je préférerais garder les images au format image pour ce que je fais.

Répondre

3

Ceci est un problème connu. Robin Dunn a répondu une ou deux fois: il suffit de créer votre méthode Logging par exemple .:

dummy_log=wx.LogNull() 

lorsque les dummy_log variables fonctionne hors de portée, l'exploitation forestière normale est activée à nouveau.

+1

Ok, c'est un début; Il n'affiche plus le message d'erreur. Mais je ne peux pas voir comment cela m'aide à attraper l'exception, c'est-à-dire faire autre chose si cela échoue. – dangerouslyfacetious

Questions connexes