2016-08-01 65 views
-3

在检查变量x是否为整数后,此代码将不会继续。如果x不是int,它会给出一个ValueError。我如何让程序忽略这个错误?我试图反转声明,如下所示:如果语句不再继续

elif x is isinstance(x, int): 

但后来,如果我给它一个整数,它会立即跳转到else语句。

from tkinter import * 

root = Tk() 

root.wm_title("InOut") 

root.geometry('500x500') 

greetings = ["hello", "Hello", "greetings", "Greetings"] 


def out(event): 

    x = ent.get() 
    if x in greetings: 
     lr.configure(text=x + ",\n is there\n anything\n I can do\n for you?") 
    elif x is isinstance(x, int): 
     if int(x) == 0: 
      lr.configure(text="This is 0") 
     elif int(x) % 2 == 0: 
      lr.configure(text="This is a even number") 
     elif int(x) % 2 != 0: 
      lr.configure(text="This is an odd number") 
    elif x is "": 
     lr.configure(text="Well") 
    else: 
     print("Closing") 
     root.destroy() 


ent = Entry(root) 
ent.grid(row=0, column=0, sticky=NW) 
lr = Label(root, text="Output") 
lr.grid(row=0, column=2, columnspan=2) 
btn = Button(root, text="Process") 
btn.grid(row=0, column=1, sticky=NW) 
btn.bind("<Button-1>", out) 

root.mainloop() 
+5

删除此x是。只是“isinstance(x,int)”。现在你问是否是(True或False),总是返回False。 – James

+0

@詹姆斯仍然不起作用 – birkenspanner

+1

看起来你可能会给它一个字符串而不是int?如果你必须将它转换为if语句下面的int,那么它就不是int了 - 请参阅我的回答 – James

回答

3

我想你可能会想看看是否一个字符串是一个整数。而不是如果声明,我只会使用try/except块:

def is_int(x): 
    try: 
     x = int(x) 
     return True 
    except: 
     return False 

把它放在你的代码中,并用它来代替对isinstance的调用。就像现在一样,即使x是一个整数,现在你问的是x是(True还是False),它总是返回False。但是,如果x是一个可以转换为整数的字符串,那么即使x可以转换为int,isinstance(x,int)永远也不会返回True。

+1

这是正确的答案,我的和其他地址的语法错误,这实际上解决了OP。 +1 – Will

2

isinstance()返回一个布尔值,所以你不需要额外的x是。直接前往

elif isinstance(x, int): 
+0

不知何故,它仍然不适用于我 – birkenspanner

+0

请您详细说明一下,真的不只是“它不工作” –

+0

当我输入的东西,它应该检查它是否是一个整数。如果是,它应该检查它是一个奇数还是偶数。但对于我来说,它并没有检查它,它只是跳到else语句,它会关闭程序 – birkenspanner

3

以下行不符合您的想法。

elif x is isinstance(x, int): 

isinstance将要返回True/False取决于x数据类型。所以陈述x is isinstance(x, int)将始终返回false,因为它不能同时为intbool

你只是想:

elif isinstance(x, int):