在數(shù)據(jù)處理的過程中,經(jīng)常需要從各種各樣的數(shù)據(jù)中提取自己需要的數(shù)據(jù)。
現(xiàn)在遇到一個問題如下:
將某個字符串格式的字段s轉(zhuǎn)換成整數(shù)做一些運(yùn)算,如果字段內(nèi)容是非數(shù)字的格式,那么就轉(zhuǎn)換成0。
這里暫時先不考慮負(fù)數(shù)和浮點數(shù)以及各種16進(jìn)制相關(guān)的數(shù)字的情況。
在python中字符串轉(zhuǎn)換為整數(shù)非常簡單,只需要一個int即可。
x = int(s)
But,在代碼中直接這么寫會出問題的。
如果s是一個' ',或者一個非數(shù)字格式的值,比如'fuck',那么python程序會拋出異常。
ValueError: invalid literal for int() with base 10: 'fuck'
這篇文章的主旨是如何優(yōu)雅的處理這種情況。
我們追求的是「Pythonic, Clearest, Powerful One Line Code.」
None Pythonic的做法是直接捕捉ValueError錯誤:
try:
x = int(s)
except ValueError as e:
x = 0
Pythonic的做法是:
x = int(s) if s.isdigit() else 0
這就是python的強(qiáng)大簡潔之處。
最后有一個問題:
如何用最優(yōu)雅的方式判斷一個string是否為numberic?考慮正數(shù),負(fù)數(shù),浮點數(shù),科學(xué)計數(shù)法,各種進(jìn)制表示方式?