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

使用try-except填充正整数列表遇问题:循环异常、未触发错误

问题分析与修复方案

代码存在的核心问题

  • try-except块位置完全错误:你把异常处理逻辑放在了while循环外面,导致只有当循环完全结束(列表长度达标)后,才会检查最后一次输入的数值。前面所有输入的负数都会直接被添加到列表里,不会触发任何错误提示。
  • 错误输入未被拦截:输入负数时,你先把它append到列表里才做检查,就算触发异常,错误数据已经留在列表中,而且循环会继续要求输入直到达到指定长度,根本不会终止当前错误输入的流程。
  • 校验范围太窄:只有最后一个输入会被检查正负,前面所有非法输入都被忽略,完全达不到“只填充正整数”的需求。

修正后的代码

myList = [] 
maxLengthList = int(input("Enter number of items: "))

def get_positive_numbers():
    while len(myList) < maxLengthList:
        try:             
            item = int(input("Enter your Item to the List: "))
            if item <= 0: 
                raise ValueError("必须输入正整数")
            myList.append(item)
        except ValueError as e:
            print(f"输入无效:{e},请重新输入。")  
    print("最终正整数列表:", myList)

get_positive_numbers()

修正说明

  • 把try-except移到while循环内部,每次输入后立即做校验,非法输入直接提示并重新输入当前项
  • 先校验再添加,确保只有合法的正整数才会进入列表
  • 同时处理两种错误:输入非整数(比如字母)、输入非正整数(0或负数)
  • 自定义异常提示,让用户清楚知道哪里错了
  • 循环会持续到收集到足够的合法正整数才终止,符合需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 09:02:05