首页 >后端开发 >Python教程 >如何确保我的程序中的用户输入有效?

如何确保我的程序中的用户输入有效?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-27 06:01:09628浏览

How Can I Ensure Valid User Input in My Program?

请求用户输入直到提供有效响应

在编程中,在进行进一步操作之前确保用户输入有效至关重要。如果接受无效数据,可能会导致错误结果或程序崩溃。让我们探索处理用户输入验证和防止错误的有效技术。

异常和循环

一种方法是使用 try 和 except 块来捕获以下情况下可能出现的错误:解析用户输入。通过将输入解析操作封装在 while 循环中,您可以连续请求输入,直到满足所需的条件。

while True:
    try:
        age = int(input("Please enter your age: "))
    except ValueError:
        print("Sorry, I didn't understand that.")
        continue
    else:
        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:
        break

封装和可重用函数

如果您经常遇到用户输入验证的需要,将相关代码封装到单独的函数中是有好处的。这允许代码重用并简化输入收集过程。

def get_non_negative_int(prompt):
    while True:
        value = int(input(prompt))
        if value >= 0:
            break
    return value

age = get_non_negative_int("Please enter your age: ")

可扩展性和通用输入验证

通过进一步扩展概念,您可以创建一个高度多功能输入验证功能,涵盖范围广泛

def sanitised_input(prompt, type_=None, min_=None, max_=None, range_=None):
    while True:
        ui = input(prompt)
        try:
            if type_ is not None:
                ui = type_(ui)
        except ValueError:
            continue

        # Perform further validation checks and return valid input if all criteria are met.

常见陷阱和最佳实践

  • 避免冗余输入语句:使用多个输入语句来实现验证是糟糕的编程风格会增加以下可能性:错误。
  • 避免递归:虽然递归对于输入验证来说似乎很诱人,但它可能会导致堆栈溢出,尤其是在无效输入过多的情况下。
  • 赞成循环以实现高效处理: 使用 while 循环可以通过连续请求输入直到收到有效响应来实现高效的错误处理已收到。

以上是如何确保我的程序中的用户输入有效?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn