Fehlermeldung bei except anzeigen

Plattformunabhängige GUIs mit wxWidgets.
Antworten
LavaDo
User
Beiträge: 5
Registriert: Freitag 6. Oktober 2017, 08:19

Donnerstag 19. Oktober 2017, 12:41

Hallo zusammen,

ich bin mal wieder auf ein kleines Problem gestoßen.
Ich möchte eine Abfrage mit mehreren TextCtrl Feldern laufen lassen und wenn der Wert in dem Feld kein float ist, eine Fehlermeldung anzeigen lassen.
Hierfür habe ich dann folgendes geschrieben:

Code: Alles auswählen

def knopf(evt):

    def Info(parent, message, caption = 'Fehlerhafte Werte'):
        dlg = wx.MessageDialog(parent, message, caption, wx.OK | wx.ICON_INFORMATION)
        dlg.ShowModal()
        dlg.Destroy()
    
    def uebernehmen(textctrl):
        try:
            value = float(textctrl.GetValue())
            print ("Richtig")

        except ValueError:
            print ("Falsch")
            Info(p, 'Der Wert enthält einen Fehler')
            
    uebernehmen(viskositaet)
    uebernehmen(masse_kugel)
    uebernehmen(durchmesser_kugel)
    uebernehmen(dichte_fluessigkeit)
    uebernehmen(anfangsgeschwindigkeit)
    uebernehmen(anfangshoehe)
Das Problem hierbei ist allerdings, dass bei jedem Wert der falsch ist eine Fehlermeldung zustande kommt.
Warum das so ist weiß ich, jedoch wie ich es beheben kann nicht. :K
__deets__
User
Beiträge: 3078
Registriert: Mittwoch 14. Oktober 2015, 14:29

Donnerstag 19. Oktober 2017, 13:16

Der Code macht ja eh nix sinnvolles - da du value ja gar nicht weiter behandelst.

Aber dein Muster kannst du ja auch so anwenden:

Code: Alles auswählen

def convert(ctrl):
      return float(ctrl.GetValue())

try:
     viskositaet = convert(viskositaet_ctrl)
     ...
except ValueError:
     # Fehlermeldung
Es sind natuerlich noch andere Herangehensweisen denkbar, wenn du zB in deiner Fehlermeldung zurueckgeben willst, *welche* Werte falsch sind:

Code: Alles auswählen

errors = []
values = {}
for name, ctrl in zip(["viskositaet", ..."], [viskositaetctrl, ...]):
     try:
           values[name] = convert(ctrl)
     except ValueError:
          errors.append(name)
if errors:
    ...
LavaDo
User
Beiträge: 5
Registriert: Freitag 6. Oktober 2017, 08:19

Freitag 20. Oktober 2017, 07:12

Vielen Dank.
Ich habe das jetzt wie im ersten Code gemacht, da ich den zweiten nicht ganz verstehe.

Kannst du den bitte erklären?
__deets__
User
Beiträge: 3078
Registriert: Mittwoch 14. Oktober 2015, 14:29

Freitag 20. Oktober 2017, 09:53

Wenn man nur eine Fehlermeldung anzeigt, bare gleichzeitig dem Nutzer vermitteln will *welche* Felder falsch sind, muss man das ja irgendwie aufsammeln, und dann aggregiert darstellen. Das habe ich angerissen. Was genau verstehst du denn nicht?
Antworten