python如果条件不能按预期正常工作

时间:2016-12-30 09:54:55

标签: python

在onClick_button事件中,我有一个if条件,如果条件失败则显示messagedialog,否则执行其余的语句。 基本上,如果条件是检查textctrl是否有值。如果有值,则执行else语句。

这是第一次使用带有msgdlg的tc(textctrls)中的任何值,但是当在dlg上单击“确定”并在tc中添加一些值时,msgdlg会在执行else时弹出。 / p>

非常感谢您的帮助。 我检查了所有的缩进。

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()

3 个答案:

答案 0 :(得分:1)

取决于您的输入

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

[True][False]。在任何情况下都是非空列表。这将被解释为True;

if [False]:
    do_something()

在此示例中do_something()将始终执行。

要解决此问题,您需要删除括号[]

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

答案 1 :(得分:1)

您将布尔逻辑混淆并创建了一个列表对象(始终为非空且始终为true)。您想使用and使用列表:

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

您永远不应该使用[...]列表进行布尔测试,因为这只会创建一个非空的列表对象,因此在布尔上下文中始终被视为true,无论包含的比较结果如何

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

答案 2 :(得分:0)

不需要将您的方法结果与空字符串进行比较:

if not self.tc1.GetValue() and not self.tc2.GetValue():

查看帖子:Most elegant way to check if the string is empty in Python?