While True循环未持续执行,输入hello后程序直接退出,求定位问题行
我仔细看了你的代码,发现这段代码本身不会导致while True循环中断——当你输入"hello"时,程序打印响应后应该会回到输入提示符>,继续等待下一次输入。
不过你遇到的“循环直接退出”的情况,大概率是因为输入过程中触发了EOFError(比如在终端按下Ctrl+D/Ctrl+Z),或者运行环境的输入机制有问题,而非代码里某一行直接导致循环中断。
你的代码里有几个可以优化的点,同时也有一个容易混淆的问题:
- 参数名误用
self:make_response是普通函数,不是类的方法,用self作为参数名会造成混淆(self在Python里通常用于类实例方法),建议改成query。 - 未处理未匹配的输入:如果输入的内容不在
database的关键词里,当前代码没有任何反馈,可能会让你误以为程序退出了,可以添加默认提示。 - 避免不必要的循环遍历:当前代码在匹配到关键词后,还会继续遍历
database里的其他key,添加break可以优化性能。
优化后的代码示例:
def make_response(query): recognised = False database = { "hello": "Nice to meet you. What can I do for you?", "hi": "Nice to meet you. What can I do for you?", "hey": "Nice to meet you. What can I do for you?", "goodbye": "Bye. See you next time!" } query = query.lower() for i in database: if i in query: recognised = True value = database.get(i) print(value) break # 匹配到后退出循环,无需继续遍历 if not recognised: print("Sorry, I don't understand that.") def robot(): print('Welcome to robot.py') print('What can I do for you?') while True: query = input('>') make_response(query) robot()
总结一下:你的原始代码里没有哪一行会直接导致while True循环中断,退出更可能是输入操作触发了EOF,或者运行环境的问题。优化上述点后,程序的交互会更清晰,也能避免误解。
内容的提问来源于stack exchange,提问作者J Muzhen




