(蟒蛇)使变量等于零如果数据类型不是数字

问题描述:

我在我的代码,这个变量分配从网络获取数据并将其转换为浮动(蟒蛇)使变量等于零如果数据类型不是数字

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

现在(提取号码后,才)如果网页上没有数据(由“ - ”指定),我得到错误

ValueError:无法将字符串转换为float:这是预期的。

如果没有数据可用,有什么办法可以让零值分配给这个变量?在Python中有没有Excels的IsError的等价物?

+0

您可以先检查数据是否为“ - ”。 – Shiping

首先,对于浮动,你应该接受.-

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

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