2017-02-25 46 views
2

我在我的代碼,這個變量分配從網絡獲取數據並將其轉換爲浮動(蟒蛇)使變量等於零如果數據類型不是數字

variable_1 = float(re.sub('[^0-9]','', basic_data_list[17])) 

現在(提取號碼後,才)如果網頁上沒有數據(由「 - 」指定),我得到錯誤

ValueError:無法將字符串轉換爲float:這是預期的。

如果沒有數據可用,有什麼辦法可以讓零值分配給這個變量?在Python中有沒有Excels的IsError的等價物?

+0

您可以先檢查數據是否爲「 - 」。 – Shiping

回答

3

首先,對於浮動,你應該接受.-

variable_1 = float(re.sub('[^0-9\-\.]','', basic_data_list[17])) 

否則:

float(re.sub('[^0-9]','', '-3.5')) 

將返回

35.0 

然後:

variable_1 = float(re.sub('[^0-9\-\.]','', 'abc')) 

產生了一個ValueError。您可以使用try塊。甚至還有直接描述問題的文檔中的一個例子:

>>> while True: 
...  try: 
...   x = int(raw_input("Please enter a number: ")) 
...   break 
...  except ValueError: 
...   print "Oops! That was no valid number. Try again..." 

except ValueError部分,你可以如你所願定義variable_1。需要注意的是0並不總是爲「不是一個數字」來分配最佳值:

try: 
    variable_1 = float(re.sub('[^0-9\-\.]','', basic_data_list[17])) 
except ValueError: 
    variable_1 = 0.0 
+0

查看更新。只需在'except'塊中設置'variable_1 = 0'即可。 –

+0

查看@antonmik的回答。這是一個單線,但它不是很可讀的恕我直言。 –

+0

謝謝!這很有幫助 – Stelios

2

str.isnumeric()作用於Unicode字符串。所以如果你使用:

unicode(basic_data_list[17]).isnumeric() 

你會得到一個布爾值 - 數值爲真,非數值爲假。

所以我想沿着這些路線的東西會工作:

variable_1 = float(re.sub('[^0-9]','', basic_data_list[17] if unicode(basic_data_list[17]).isnumeric() else "0")) 
從您的回覆

我使用Python 3的猜測您選擇繼承人什麼,我發現: NameError: global name 'unicode' is not defined - in Python 3

,你應該能夠通過將「unicode」替換爲「str」來使用此功能

+0

它給出了錯誤-NameError:名稱'unicode'沒有定義 – Stelios

+0

編輯 - 我想你使用python 3然後.. – antonmik

+0

你是對的。我正在使用Python 3.6。現在它的工作很好。非常感謝你。 – Stelios