• 技术文章 >Python技术 >Python基础教程

    python面对用户无意义输入的解决

    小妮浅浅小妮浅浅2021-08-09 14:45:22原创2105

    问题

    正在编写一个接受用户输入的程序。

    #note: Python 2.7 users should use `raw_input`, the equivalent of 3.X's `input`
    age = int(input("Please enter your age: "))
    if age >= 18:
        print("You are able to vote in the United States!")
    else:
        print("You are not able to vote in the United States.")

    只要用户输入有意义的数据,程序就会按预期工作。

    C:\Python\Projects> canyouvote.py
    Please enter your age: 23
    You are able to vote in the United States!

    但如果用户输入无效数据,它就会失败:

    C:\Python\Projects> canyouvote.py
    Please enter your age: dickety six
    Traceback (most recent call last):
      File "canyouvote.py", line 1, in <module>
        age = int(input("Please enter your age: "))
    ValueError: invalid literal for int() with base 10: 'dickety six'

    而不是崩溃,我希望程序再次要求输入。像这样:

    C:\Python\Projects> canyouvote.py
    Please enter your age: dickety six
    Sorry, I didn't understand that.
    Please enter your age: 26
    You are able to vote in the United States!

    当输入无意义的数据时,如何让程序要求有效输入而不是崩溃?

    我如何拒绝像 那样的值-1,int在这种情况下这是一个有效但无意义的值?

    解决方法

    完成此操作的最简单方法是将input方法放入 while 循环中。使用continue时,你会得到错误的输入,并break退出循环。

    当您的输入可能引发异常时

    使用try和except检测用户何时输入无法解析的数据。

    while True:
        try:
            # Note: Python 2.x users should use raw_input, the equivalent of 3.x's input
            age = int(input("Please enter your age: "))
        except ValueError:
            print("Sorry, I didn't understand that.")
            #better try again... Return to the start of the loop
            continue
        else:
            #age was successfully parsed!
            #we're ready to exit the loop.
            break
    if age >= 18:
        print("You are able to vote in the United States!")
    else:
    print("You are not able to vote in the United States.")

    实现你自己的验证规则

    如果要拒绝 Python 可以成功解析的值,可以添加自己的验证逻辑。

    while True:
        data = input("Please enter a loud message (must be all caps): ")
        if not data.isupper():
            print("Sorry, your response was not loud enough.")
            continue
        else:
            #we're happy with the value given.
            #we're ready to exit the loop.
            break
     
    while True:
        data = input("Pick an answer from A to D:")
        if data.lower() not in ('a', 'b', 'c', 'd'):
            print("Not an appropriate choice.")
        else:
            Break

    结合异常处理和自定义验证

    以上两种技术都可以组合成一个循环。

    while True:
        try:
            age = int(input("Please enter your age: "))
        except ValueError:
            print("Sorry, I didn't understand that.")
            continue
     
        if age < 0:
            print("Sorry, your response must not be negative.")
            continue
        else:
            #age was successfully parsed, and we're happy with its value.
            #we're ready to exit the loop.
            break
    if age >= 18:
        print("You are able to vote in the United States!")
    else:
        print("You are not able to vote in the United States.")

    以上就是python面对用户无意义输入的解决,希望对大家有所帮助。更多Python学习指路:python基础教程

    专题推荐:python输入
    上一篇:python如何对单个值测试多个变量? 下一篇:python使用语句的常见陷阱

    相关文章推荐

    • 一看就懂的Python输入和输出、格式化字符串方法• python输入用空格吗• 如何用python输入数字• python输入时怎么换行• python输入三个数求平均值• python输入一个列表求平均值• python输入身份证号输出出生年月• python输入成绩求平均分• Python输入三个数用空格隔开• python输入身高体重算BMI• python输入数字变成月份• python输入三个数字从小到大排序• python输入函数input的使用

    全部评论我要评论

    © 2021 Python学习网 苏ICP备2021003149号-1

  • 取消发布评论
  • 

    Python学习网