Python 3.9代码中else语句被绕过,if与for循环同时打印内容如何解决
问题根因
你代码存在两个核心逻辑错误:
- 包含判断逻辑错误:
self.items中存储的是藏品实例对象,你直接用字符串类型的分类参数desc做in判断,永远会返回True,所以程序永远会进入if分支打印错误提示,不会进入else分支。 - 代码块归属错误:遍历打印藏品信息的for循环写在了if-else结构之外,不受分类合法性判断的控制,只要存在对应分类的藏品,就会打印对应内容,最终就会出现错误提示和藏品信息同时输出的问题。
修正后代码
def displayItemFromDescription(self, desc): print() # 先筛选匹配对应分类的藏品 matched_items = [item for item in self.items if item.desc == desc] if not matched_items: print('Sorry, that item category does not exist. Please try again.') return # 存在匹配藏品时打印表头和对应内容 print('Items for description:', desc, '\n') print('{:<30s}{:<21s}{:<8s}{:<5s}'.format('Description', 'Category', 'Value', 'Amount')) print('-' * 65) for item in matched_items: item.display()
开发建议
- 做包含判断时,要先确认容器内存储的元素类型和被判断的元素类型一致,不要直接用字符串和实例对象做匹配
- 关联逻辑的代码块要放到对应判断分支内部,避免代码脱离逻辑管控
内容的提问来源于stack exchange,提问作者coding53
相关产品推荐
相关产品推荐

