You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中带输入参数的函数如何通过递归处理非法输入?

1. 输入非int类型时的递归处理逻辑

你当前的代码已经实现了错误输入下的递归重试,执行逻辑是这样的:

  • 用户输入的内容无法转换成int时,会触发ValueError进入except代码块
  • 打印错误提示后,代码执行return pay(),这一步就是递归调用:重新运行一次pay函数的完整逻辑,要求用户重新输入
  • 只有当两次输入都能成功转为int时,才会跳过except块,完成薪资计算后返回结果,结束递归

这里有两个优化建议:

  • Python默认有递归深度限制(通常是1000次),如果用户连续一千次都输入错误内容,程序会触发递归深度超限报错直接退出。这种场景更推荐用无限循环替代递归,写法更稳妥,示例如下:
def pay():
    while True:
        hours = input("Enter hours: ")
        rate = input("Enter rate: ")
        try:
            hours = int(hours)
            rate = int(rate)
            break
        except ValueError:
            print("Not a valid number!")
    if hours > 40: 
        rate *= 1.5
    return "Pay: $" + str(hours * rate)

print(pay())
  • 不要使用裸except语句,最好明确指定捕获ValueError异常,避免误吃掉键盘中断、程序强制退出等其他异常,排查问题时会更方便。

2. input函数的使用合理性

  • 你当前做的是命令行交互式小工具,用input完全正确,input本身的设计目的就是在命令行环境下接收用户的实时输入,完全匹配这个场景的需求。
  • 「非必要场景下不应该使用input」这个想法是完全正确的。绝大多数生产环境运行的Python程序(比如后端服务、定时自动化脚本、批量数据处理程序等)都不需要和用户实时交互,输入来源一般是命令行参数、配置文件、接口请求、存储介质读取等,如果在这类程序里加了input,会导致程序运行到对应位置直接卡住等待人工输入,无法自动完成执行流程,反而影响程序的正常运行。

内容的提问来源于stack exchange,提问作者Vikram Negi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 05:54:03