在检查变量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()
答案 0 :(得分:3)
以下行没有按照您的想法行事。
elif x is isinstance(x, int):
isinstance
将返回True
/ False
,具体取决于x
的数据类型。因此,x is isinstance(x, int)
语句将始终返回false,因为它不能同时为int
和bool
。
你只想:
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):