令人困惑的python - 无法将字符串转换为float

时间:2013-11-01 22:43:45

标签: python error-handling

我收到了一个值错误,即使我尝试使用代码,它也不起作用!

我怎样才能做到对? - 我使用的是Python 3.3.2!

以下是代码:Code

正如您所看到的,该程序会询问您可以行走多少英里,并根据您输入的内容为您提供响应。

这是文本格式的代码:

print("Welcome to Healthometer, powered by Python...")
miles = input("How many miles can you walk?: ")
if float(miles) <= 0:
    print("Who do you think you are?!! Go and walk 1000 miles now!")
elif float(miles) >= 10:
    print("You are very healthy! Keep it up!")
elif float(miles) > 0 and miles < 10:
    print("Good. Try doing 10 miles")
else:
    print("Please type in a number!")
    miles = float(input("How many miles can you walk?: "))
    if miles <= 0:
        print("Who do you think you are?!! Go and walk 1000 miles now!")
    elif miles >= 10:
        print("You are very healthy! Keep it up!")
    elif miles > 0 and miles < 10:
        print("Good. Try doing 10 miles")

4 个答案:

答案 0 :(得分:6)

您需要考虑用户可能没有填写正确的值:

try:
    miles = float(input("How many miles can you walk? "))
except ValueError:
    print("That is not a valid number of miles")

try/except处理ValueError尝试将输入转换为浮点数时可能出现的float

答案 1 :(得分:3)

问题正是回溯日志所说的:Could not convert string to float

  • 如果你有一个只有数字的字符串,那么python足够聪明,可以做你正在尝试的东西并将字符串转换成浮点数。
  • 如果您的字符串中包含非数字字符,则转换将失败,并为您提供错误。

大多数人解决此问题的方法是使用try/except(请参阅here),或使用isdigit()函数(请参阅here)。

<强>尝试/除

try:
    miles = float(input("How many miles can you walk?: "))
except:
    print("Please type in a number!")

<强> ISDIGIT()

miles = input("How many miles can you walk?: ")
if not miles.isdigit():
    print("Please type a number!")

请注意,如果字符串

中有小数点,后者仍将返回false

修改

好的,我暂时无法回复你,所以我会发布答案以防万一。

while True:
    try:
        miles = float(input("How many miles can you walk?: "))
        break
    except:
        print("Please type in a number!")

#All of the ifs and stuff

代码非常简单:

  • 它将继续尝试将输入转换为浮点数,如果失败则循环回到开头。
  • 当它最终成功时,它将从循环中断开并转到你放下的代码。

答案 2 :(得分:1)

追溯意味着它在锡上的含义。

>>> float('22')
22.0
>>> float('a lot')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: could not convert string to float: 'a lot'

float可以将看起来像有效小数的字符串转换为float s。它无法转换任意字母数字字符串,尤其包括'How am I supposed to know?'

如果要处理任意用户输入,则必须使用try/except块来捕获此异常。

答案 3 :(得分:1)

这里的意思是它不能转换字母数字字符串,在某些情况下,如果您正在抓取数据或类似$ 400之类的东西,则$符号是字母数字字符,那么它会考虑一个字符串,如果您尝试将其转换为浮点型,则会显示错误,我给你此示例显示它仅将数字转换为浮点数,在这种情况下,我解决了如下问题:data ='$ 400',price = data [1:],然后if,if(float(price)<300):并且有效