如何在JetBrains中获取正常Python REPL及饮酒歌程序异常排查
解决你的两个Python问题
问题1:在JetBrains软件中获取正常的Python交互式解释器(REPL)
不管你用的是PyCharm、装了Python插件的IntelliJ IDEA,还是其他JetBrains家的IDE,获取正常REPL的方法都很直接:
- 最快捷路径:看IDE底部工具栏,找到Python Console标签页,点击就能打开。这个控制台默认关联你当前项目的Python解释器(虚拟环境或全局环境),可以直接写代码交互。
- 更灵活的纯净REPL:点击顶部菜单栏的
Tools->Python Console,选择你想要用的解释器就行。另外,也可以打开IDE自带的终端(底部工具栏的Terminal),输入python(Python3的话可能需要python3),就能启动和命令行完全一致的REPL,前提是终端已经配置好对应Python环境。 - 小提醒:如果控制台打不开或解释器不对,先去
File->Settings(Windows/Linux)或者PyCharm->Settings(Mac)里,找到Project: [你的项目名]->Python Interpreter,确认已经配置了正确的Python解释器。
问题2:饮酒歌代码在JetBrains中行为异常的解决
你的代码在命令行正常,但JetBrains里出问题,大概率是输出缓冲或者运行方式的问题,我给你拆解下:
首先,你的代码逻辑完全没问题——lines()生成器负责生成每一句歌词,sing()遍历打印。但IDE的输出有时候会有缓冲,导致内容不能及时显示,或者你可能没正确触发函数执行。
给你两个针对性解决办法:
强制刷新输出:在
print函数里加上flush=True参数,让输出立刻显示,修改后的代码如下:def lines(): bottles = 99 while bottles > 0: yield str(bottles) + ' bottles of pop on the wall!' yield str(bottles) + ' bottles of pop!' yield 'Take one down and pass it around!' bottles -= 1 yield str(bottles) + ' bottles of pop on the wall!' yield '' def sing(): for line in lines(): print(line, flush=True) # 别忘了调用函数!如果是作为脚本运行,必须加上这一行 sing()检查运行方式:如果你是在IDE的Python Console里直接粘贴代码,那你需要手动调用
sing()函数(输入sing()然后回车),否则代码只是定义了函数,不会执行。如果是作为独立脚本运行,确保你点击的是“Run”按钮,而不是在Console里执行代码片段。
另外,也可以检查下IDE使用的Python版本和你命令行的版本是否一致,虽然这段代码兼容性很强,但版本不一致偶尔也会有奇怪的小问题。
内容的提问来源于stack exchange,提问作者Christos Hayward
相关产品推荐
相关产品推荐

