如果声明没有继续

时间:2016-08-01 16:20:24

标签: python python-3.x

在检查变量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()

3 个答案:

答案 0 :(得分:3)

以下行没有按照您的想法行事。

elif x is isinstance(x, int):

isinstance将返回True / False,具体取决于x的数据类型。因此,x is isinstance(x, int)语句将始终返回false,因为它不能同时为intbool

你只想:

elif isinstance(x, int):

答案 1 :(得分:3)

我想您可能正在尝试查看字符串是否为整数。而不是if语句,我只使用try / except块:

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

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

答案 2 :(得分:2)

isinstance()返回一个布尔值,因此您不需要额外的x。直接进入

elif isinstance(x, int):