在寫物理實驗圖像處理的腳本時,遇到了一個判斷輸入的字符串是否為數字的方法
最開始我的思路是這個
test = input()
while test.isdigit():
# do something
用的是系統自帶的String.isdigit()的方法,該方法用於判定輸入的字符串是否為純數。如果是純數,則返回True,否則返回False。
但是這樣有一個問題,浮點數中有dot這個符號,所以一旦用戶輸入浮點數,返回值就是False,達不到我要的目標。后來想用最原始的C++中判定ASCII碼的方法解決該問題,覺得過於復雜。於是有了下面這個思路,用異常來捕捉。
def isscalar(str):
try:
float(str)
except ValueError:
return False
else:
return True
由於在使用float()(也包括其他數型的轉換int、long)轉換時,若轉換對象不是數字,系統會自動報錯
ValueError: could not convert string to float: 'string'
於是利用這一點來實現判定用戶輸入是否是數字,也算是對異常捕捉的一次學習了。