解决Python的ValueError:无法将字符串转换为浮点型

ValueErrors 是 Python 中的一种异常。它们被归类为运行时错误,因为在编写程序期间,调试器或 IDE 中的语法突出显示器无法识别它们。

ValueError 的一个常见示例是尝试将数字除以零。由于编写此语句时没有语法错误,因此解释器在尝试执行代码时会突然停止,因为逻辑上不可能将任何内容除以零。

当您尝试使用构造函数将字符串转换为整数或浮点数时,会发生 ValueError 的另一个实例。由于将字符串或整数以外的任何其他数据类型转换为浮点类型是不切实际的,因此 Python 解释器会引发异常。该错误如下所示:

ValueError                                Traceback (most recent call last)
<ipython-input-1-3038d8149efd> in <cell line: 2>()
ValueError: could not convert string to float: 'string input'

模拟 ValueError:字符串到浮点转换的挑战

当解释器对如何根据代码要求将字符串转换为浮点数感到困惑时,可能会引发错误“无法将字符串转换为浮点数”。

导致此错误的最常见原因是用户输入。当接受用户输入时,用户可能会对他们应该输入计算机的值类型感到困惑。或者,如果程序员在提示用户之前没有提及输入的数据类型,解释器可能会默认将其读取为字符串。

Python 2 和 python3 之间的用户输入存在一个主要差异。在 Python 2 中,该语句raw_input()用于以默认格式获取用户的输入。例如,如果用户输入一个整数,那么解释器会将其读取为整数。只有当给定的输入放在引号内时,解释器才会将其视为字符串。

而在 Python 3 中,这种方法发生了变化。Raw_input()变成了唯一input()如今,如果仅input()使用语句,任何类型的用户输入的默认格式,无论是数字还是单词,都将被视为字符串。相反,我们可以使用 float()、int() 构造函数将用户输入限制为特定类型。

当使用上述构造函数并且程序需要浮点输入但获取字符串时,它将引发值错误。

在下面给定的程序中,我们尝试将十进制数(浮点数而不是整数)除以 10。所需的浮点数将根据用户输入而变化。我们使用 float() 构造函数来限制输入的类型,并将给定的用户输入转换为浮点型。我们将提供一个字符串输入并查看如何弹出值错误。

值错误无法将字符串转换为浮点型

相关:处理 Python 中的 ValueError:检测字符串和整数。

解决 Python 中的 ValueError:Try-Except 策略

在 python 中处理值错误与在 Python 3 中处理其他异常相同。我们可以使用 try 和 except 块来处理它们。try 和 except 语句是该编程语言中最常见的错误处理方法。

让我们看看如何使用 try 和 except 块来处理这个值错误。

#using try and except to handle value error
try: #using the try block
  num=float(input("Enter a number (precision upto atleast one decimal place)= "))
  print("After dividing by 10 we get= ", num/10)
except ValueError: #using the except block
  print("Please enter a number as per instruction!")

现在,如果您输入一个字符串,输出将如下所示:

Enter a number (precision up to at least one decimal place)= Hello
Please enter a number as per instruction!

而且,如果我们给出适当的浮点输入,输出将是:

Enter a number (precision upto atleast one decimal place)= 16.663
After dividing by 10 we get=  1.6663000000000001
2 种输出类型 – 使用 Try 和 except 处理值错误

我们还可以将ifandnot语句与函数一起使用isdigit()isdigit()函数查找变量中的数字,可用于检查用户输入是否具有所需的数据类型。

这就是如何使用 if、not 语句以及 isdigit() 函数来识别字符串和浮点数。

#using if, not and isdigit()
num=(input("Enter a number (precision upto atleast one decimal place)= "))
#check if the variable has digits
if not num.isdigit() :
  print("Please enter a number as input!")
else:
  print("After dividing by 10 we get= ", num/10)

如果您输入一个字符串,您将得到以下输出:

Enter a number (precision upto atleast one decimal place)= hi
Please enter a number as input!

类似:[已解决]Python 中的“意外关键字参数”类型错误。

总结:掌握 Python 中的 ValueError 处理

本文讨论 Python 中的“值错误”异常我们已经研究了此错误的可能原因并进行了一些修复。它们确实很容易实现和解释。

您可以根据您的要求在项目中使用其中任何一种。您认为我们在要求用户输入时是否应该提供额外的说明?