(蟒蛇)使变量等于零如果数据类型不是数字
我在我的代码,这个变量分配从网络获取数据并将其转换为浮动(蟒蛇)使变量等于零如果数据类型不是数字
variable_1 = float(re.sub('[^0-9]','', basic_data_list[17]))
现在(提取号码后,才)如果网页上没有数据(由“ - ”指定),我得到错误
ValueError:无法将字符串转换为float:这是预期的。
如果没有数据可用,有什么办法可以让零值分配给这个变量?在Python中有没有Excels的IsError的等价物?
首先,对于浮动,你应该接受.
和-
:
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
查看更新。只需在'except'块中设置'variable_1 = 0'即可。 –
查看@antonmik的回答。这是一个单线,但它不是很可读的恕我直言。 –
谢谢!这很有帮助 – 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”来使用此功能
您可以先检查数据是否为“ - ”。 – Shiping