我正在編寫一個程序,用戶輸入一個基數爲10的數字,並將其轉換爲不同(或相同)基數中的數字。如何在Python中檢查參數的類型?
def convert(a,b)
其中a是輸入,b是新的基數。如果b不是整數,如果b假定沒有值(即空白),或者b是小於1的整數,則指示程序返回值「-1」。
我知道如何轉換數字,並且我知道如果b小於1,程序返回-1,但是如果b爲空或不是整數,如何讓程序返回-1?
我正在編寫一個程序,用戶輸入一個基數爲10的數字,並將其轉換爲不同(或相同)基數中的數字。如何在Python中檢查參數的類型?
def convert(a,b)
其中a是輸入,b是新的基數。如果b不是整數,如果b假定沒有值(即空白),或者b是小於1的整數,則指示程序返回值「-1」。
我知道如何轉換數字,並且我知道如果b小於1,程序返回-1,但是如果b爲空或不是整數,如何讓程序返回-1?
簡答:不。
類型檢查不是Pythonic。試着做你想做的事情,如果它行得通,它就會起作用,如果沒有,它會拋出異常。
同樣,返回-1
失敗並不是很pythonic,一般來說,你想拋出一個異常的失敗。有一些(罕見的)情況下,這是有道理的,但一般來說,這意味着你必須檢查值(而不是僅僅捕獲異常),並且很難找出錯誤(值爲-1
而不是獲取一個例外)。
長答案:如果您真的需要,那麼您可以使用isinstance(value, int)
來檢查一個值是否是一個整數,但是這會破壞Python的鴨子輸入,因此在99.9%的時間內是一個糟糕的主意。這也不一定符合你的預期 - 例如,bool
是int
的一個子類,所以isinstance(True, int)
將返回True
- 這可能是也可能不是你想要的。
如果您必須使用'isinstance',通常最好檢查['numbers.Integral'](http:// docs。python.org/library/numbers.html#numbers.Integral)而不是'int'。 – Dougal
@Dougal +1。非常好的一點。 –
這是一種可以檢查b值的方法。
def convert(a, b=None):
if isinstance(b, int) and b > 1:
return do_convert(a, b)
return -1
我的建議是採取一切你有,並試圖把它變成一個int
。這是更多Pythonic:即使它不是嚴格意義上的int
類型,它也可以像整數一樣工作。同時,它確保您在編寫代碼時只需要擔心int
。
def convert(n):
try:
n = int(n)
except ValueError, TypeError:
return -1
# here, do the conversion and return the result
看起來像功課。你的老師沒有教你好的編程習慣。
Python程序員通常會按原樣進行操作。如果可能的話,內置的python函數會將變量轉換爲必要的類型。如果不可能,取決於調用函數採取某種行動。這被稱爲鴨子打字。 如果您知道輸入將來可能會導致問題,您可以添加一些斷言語句以防止錯誤輸入。
你可以用isinstance()函數檢查你的變量是否是一個整數。您可以通過檢查變量是否爲真來檢查它是否爲空。
如果這不是一項家庭作業,轉換鹼基的最佳方法是使用int(a, b)
函數中的內置函數。
這功課嗎? – Daenyth
請參閱http://stackoverflow.com/questions/1549801/differences-between-isinstance-and-type-in-python。 – zoo