如何修复Python代码中的'NoneType'对象不可迭代错误?
解决你的点餐脚本TypeError问题
嘿,我一眼就揪出问题所在啦!咱们来快速搞定这个报错~
错误根源:函数缺少返回值
你遇到的TypeError: 'NoneType' object is not iterable,核心原因是你的get_order函数没有返回收集到的订单列表。
当你在main里执行orders = get_order(menu)时,因为get_order函数末尾没写return orders,Python会默认返回None。接下来bill_total(orders, menu)接收的orders是None,而for order in orders根本没法遍历一个非可迭代的None对象,自然就触发报错了。
另外还有个小bug:main函数最后打印的order是循环里的单个变量,应该改成orders才能显示所有点的餐品。
修正后的代码
我把两处问题都修正好了,你可以直接运行试试:
menu = {'Angel Dust Blunt': 6.66, 'The OG Blunt': 4.20, 'Caviar Blunt': 7.10, 'The Chronic Blunt' : 4.20} def print_menu(menu): for name, price in menu.items(): print(name, ': $', format(price, '.2f'), sep = '') def get_order(menu): orders = [] order = input("What would you like to order (Q to quit)") while (order.upper() != 'Q'): # 查找订单,存在则添加到列表 found = menu.get(order) if found: orders.append(order) else: print("Menu item doesn't exist") order = input("Anything else? (Q to Quit)") # 关键:添加返回语句,把收集到的订单列表返回给调用者 return orders def bill_total(orders, menu): total = 0 for order in orders: total += menu[order] return total def main(): menu = {'Angel Dust Blunt': 6.66, 'The OG Blunt': 4.20, 'Caviar Blunt': 7.10, 'The Chronic Blunt' : 4.20} print_menu(menu) orders = get_order(menu) # 优化:如果用户直接输入Q退出,给出友好提示 if not orders: print("You didn't order anything!") return total = bill_total(orders, menu) # 把单个order改成orders,显示所有订购项目 print("You ordered:", orders, "Your total is: $", format(total, '.2f'), sep='') main()
额外小提示
我还加了个判断逻辑:如果用户直接输入Q退出,会提示"You didn't order anything!",避免计算空订单的总额,体验更友好~
作为Python初学者,忘记写函数返回值是超级常见的坑,以后写函数的时候多想想:这个函数需要给调用者返回什么内容吗?如果需要,一定要加上return语句哦!
内容的提问来源于stack exchange,提问作者E1y1rac
相关产品推荐
相关产品推荐

