我正在编写一个小的Python脚本,该脚本需要用户传递的信息。由于我的脚本的某些部分可能会引发异常,因此如果用户输入的格式错误,则会破坏脚本,因此我想事先进行检查。无论如何,这是一个有用的措施。为了获得更好的用户体验,如果输入格式错误,我不希望脚本被中断。相反,应该重新提出问题。
因此,我为每个用户输入定义了一个函数,该函数将在进行下一步之前检查输入。通过try
和except
错误处理方法进行检查,以确保脚本不被中断。
def ask_for_int( prompt = "Please enter an integer:\n" ):
user_input = input( prompt ).strip()
# Check if the value can be transformed into a float
try:
return int( user_input )
except:
ask_for_int( prompt = "You need to pass an integer:\n" )
some_number = ask_for_int()
只要输入整数,此代码就可以正常工作。如果将字符串传递给它,它还会识别TypeException并询问整数。不幸的是,尽管some_number
变量现在不保存我传递的整数,但为空。
让我们首先在上一个示例的末尾添加一个print( 'You passed the valid integer: %s' % some_number )
。如果我们现在将123
传递给提示符,则打印返回123
。哇!
但是,如果我们通过abc
,脚本将拒绝我们的输入并要求输入新的数字,即except
在这里工作。现在让我们完成此任务,并实际上传递一个整数,例如321
。当然,打印结果应该返回321
,因为那是接受的整数,不是吗?好吧,很遗憾,输出为None
。
传递整数
Please enter an integer:
123
You passed the valid integer: 123
首先传递字符串,然后传递整数
Please enter an integer:
abc
You need to pass an integer:
321
You passed the valid integer: None
答案 0 :(得分:3)
您没有返回递归调用的结果,因此该函数返回None
。
您在哪里:
ask_for_int( prompt = "You need to pass an integer:\n" )
写:
return ask_for_int( prompt = "You need to pass an integer:\n" )
答案 1 :(得分:2)
这是因为except
块未返回任何值。
我建议您将其更改为:
try:
user_input = int(user_input)
except:
user_input = ask_for_int(prompt="You need to pass an integer:\n")
return user_input