2016-12-30 1 views
-4

In einem onClick_button-Ereignis habe ich eine if-Bedingung, um eine Meldung anzuzeigen, wenn die Bedingung fehlschlägt oder sonst die restlichen Anweisungen ausführen. Grundsätzlich, wenn Bedingung überprüft, ob ein Textctrl Wert hat oder nicht. Wenn ein Wert vorhanden ist, führen Sie die Else-Anweisung aus.Python, wenn die Bedingung nicht wie erwartet funktioniert

das funktioniert zum ersten Mal mit keinen Wert in TC (TextCtrls) mit einer msgdlg, aber wenn Sie OK auf der dlg und fügen Sie einen Wert in der TC, immer noch die msgdlg Pop-out, wenn es die sonst ausgeführt werden soll.

Ihre Hilfe wird sehr geschätzt. Ich habe alle Einrückungen überprüft.

def onClick_button_new(self, event): 

    self.list_box.Clear() 
    varstr = "csv" 


    if [(self.tc1.GetValue() == "") or (self.tc2.GetValue() == "")]: 
     dial = wx.MessageDialog(None, 'No file specified. Please specify relevant file', 'Error', wx.OK) 
     dial.ShowModal() 
    else: 
     file1 = subprocess.check_output("cut -d '.' -f2 <<< %s" %self.var1, shell = True, executable="bash") 
     file1type = file1.strip() 
     print file1type 
     file2 = subprocess.check_output("cut -d '.' -f2 <<< %s" %self.var2, shell = True, executable="bash") 
     file2type = file2.strip() 
     if varstr in (file1type, file2type): 
      print "yes" 
     else: 
      dial = wx.MessageDialog(None, ' Invalid file format. Please specify relevant file', 'Error', wx.OK) 
      dial.ShowModal() 

Antwort

1

Je nach Eingang

[(self.tc1.GetValue() == "") or (self.tc2.GetValue() == "")] 

ist entweder [True] oder [False]. in jedem Fall eine nicht leere Liste. dies wird als True interpretiert;

if [False]: 
    do_something() 

In diesem Beispiel wird do_something() immer ausgeführt.

das Sie die Klammern entfernen müssen fix zu []:

if (self.tc1.GetValue() == "") or (self.tc2.GetValue() == ""): 
    ... 
+0

Vielen Dank. Das hat funktioniert. –

1

Sie haben Ihre Boolesche Logik gemischt und ein Listenobjekt erstellt (was immer nicht leer und immer wahr ist). Sie wollen and und nicht verwenden, um eine Liste verwenden:

if self.tc1.GetValue() == "" and self.tc2.GetValue() == "": 

Sie sollten nie eine [...] Liste für einen boolean Test durchzuführen, denn das ist nur eine Liste Objekt erstellt, das nicht leer ist, und somit immer wahr betrachtet in ein booleschen Kontext ergibt unabhängig von dem enthaltenen Vergleich:

>>> [0 == 1 or 0 == 1] 
[False] 
>>> bool([0 == 1 or 0 == 1]) 
True 
+0

Vielen Dank. das hat funktioniert. –

Verwandte Themen