2012-05-21 59 views
0

我正在編寫一個程序,用戶輸入一個基數爲10的數字,並將其轉換爲不同(或相同)基數中的數字。如何在Python中檢查參數的類型?

def convert(a,b) 

其中a是輸入,b是新的基數。如果b不是整數,如果b假定沒有值(即空白),或者b是小於1的整數,則指示程序返回值「-1」。

我知道如何轉換數字,並且我知道如果b小於1,程序返回-1,但是如果b爲空或不是整數,如何讓程序返回-1?

+1

這功課嗎? – Daenyth

+1

請參閱http://stackoverflow.com/questions/1549801/differences-between-isinstance-and-type-in​​-python。 – zoo

回答

14

簡答:不。

類型檢查不是Pythonic。試着做你想做的事情,如果它行得通,它就會起作用,如果沒有,它會拋出異常。

同樣,返回-1失敗並不是很pythonic,一般來說,你想拋出一個異常的失敗。有一些(罕見的)情況下,這是有道理的,但一般來說,這意味着你必須檢查值(而不是僅僅捕獲異常),並且很難找出錯誤(值爲-1而不是獲取一個例外)。

長答案:如果您真的需要,那麼您可以使用isinstance(value, int)來檢查一個值是否是一個整數,但是這會破壞Python的鴨子輸入,因此在99.9%的時間內是一個糟糕的主意。這也不一定符合你的預期 - 例如,boolint的一個子類,所以isinstance(True, int)將返回True - 這可能是也可能不是你想要的。

+4

如果您必須使用'isinstance',通常最好檢查['numbers.Integral'](http:// docs。python.org/library/numbers.html#numbers.Integral)而不是'int'。 – Dougal

+0

@Dougal +1。非常好的一點。 –

1

這是一種可以檢查b值的方法。

def convert(a, b=None): 
    if isinstance(b, int) and b > 1: 
     return do_convert(a, b) 
    return -1 
0

我的建議是採取一切你有,並試圖把它變成一個int。這是更多Pythonic:即使它不是嚴格意義上的int類型,它也可以像整數一樣工作。同時,它確保您在編寫代碼時只需要擔心int

def convert(n): 
    try: 
     n = int(n) 
    except ValueError, TypeError: 
     return -1 
    # here, do the conversion and return the result 
0

看起來像功課。你的老師沒有教你好的編程習慣。

Python程序員通常會按原樣進行操作。如果可能的話,內置的python函數會將變量轉換爲必要的類型。如果不可能,取決於調用函數採取某種行動。這被稱爲鴨子打字。 如果您知道輸入將來可能會導致問題,您可以添加一些斷言語句以防止錯誤輸入。

你可以用isinstance()函數檢查你的變量是否是一個整數。您可以通過檢查變量是否爲真來檢查它是否爲空。

如果這不是一項家庭作業,轉換鹼基的最佳方法是使用int(a, b)函數中的內置函數。