2016-08-01 64 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):