【发布时间】:2019-05-10 19:15:59
【问题描述】:
我正在编写一个需要用户传递信息的小 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
【问题讨论】:
标签: python error-handling user-input