gpt4 book ai didi

python - 如果第一个输入的数据给出 ValueError,则对输入数据进行值检查并将其分配给变量会出现错误

转载 作者:行者123 更新时间:2023-12-01 07:34:58 25 4
gpt4 key购买 nike

假设我想创建一个要求用户输入 float 据的函数。程序检查输入是否为 float ,如果不是,则返回到开头,如果是,则返回数据,使函数结束。它可以很好地检查数据类型,如果数据是 float ,它也可以,但是如果我先输入无效数据,然后输入有效数据,则会出现错误。

def function1():
try:
data1 = float(input("Please type in pi with its first 2 digits"))
status = 1
except ValueError:
status = 0
if status == 0:
print("Please enter a valid answer.")
function1()
else:
return data1
x = float(function1())
if x == 3.14:
print("Correct!")
else:
print("Incorrect, please try again.")
function1()

它给我的错误是:

TypeError: float() argument must be a string or a number, not 'NoneType'

再次注意。仅当我第一次输入无效数据(例如“否”)然后输入有效数据(3.14、2.71 等)时,才会发生这种情况。否则,“程序”就可以正常工作。

最佳答案

你应该返回function1,例如:

def function1():
try:
data1 = float(input("Please type in pi with its first 2 digits"))
status = 1
except ValueError:
status = 0
if status == 0:
print("Please enter a valid answer.")
return function1()
# ^^^^ Here
else:
return data1

这也使得该函数具有递归性。当您没有从函数中返回任何内容时,None 会自动返回。

<小时/>

此外,您还捕获了异常,因此您应该从那里进行递归:

def function1():
try:
data1 = float(input("Please type in pi with its first 2 digits"))
except ValueError:
print("Please enter a valid answer.")
return function1()
# ^^^^ Here
else:
return data1

这还删除了跟踪有效性的冗余状态

<小时/>

顺便说一句,Python 没有尾部调用优化,因此在使用递归时可以达到最大堆栈大小。

关于python - 如果第一个输入的数据给出 ValueError,则对输入数据进行值检查并将其分配给变量会出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57029299/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com