Spyder运行Python代码时弹出问题报告窗口故障求助
问题定位
代码运行触发Spyder弹出问题报告窗口,核心是两个问题:
- 语法缩进错误:Python对代码缩进有强制要求,你编写的向上移动(E键)判断分支缩进完全错位,解释器无法正常解析代码,会直接触发运行时错误,在Spyder的集成运行环境下容易连带导致内核崩溃弹窗。
- Matplotlib运行逻辑错误:你在游戏循环里反复调用阻塞式的
plt.show(),该方法默认会暂停主线程等待绘图窗口手动关闭,循环中反复触发绘图阻塞、新建画布的逻辑,很容易导致Spyder的图形渲染后端挂死,触发崩溃提示。
修复后完整代码
import matplotlib.pyplot as plt import random # 开启Matplotlib交互模式,避免show阻塞主线程 plt.ion() coords = [random.randint(-5,5), random.randint(-5,5)] enemy_coords = [random.randint(-5,5), random.randint(-5,5)] # 初始绘图 plt.cla() plt.plot(coords[0], coords[1], 'bo', enemy_coords[0], enemy_coords[1], 'rx') plt.plot([1,2], [3,1]) plt.xlim(-5,5) plt.ylim(-5,5) plt.pause(0.1) slope = (1-3)/(2-1) #=-2 #y = -2x + 5 print(slope) print('Controls: Up(E), Down(D), Left(W), Right(R)') while enemy_coords[0] != coords[0] or enemy_coords[1] != coords[1]: move = str(input('')) move = move.upper() if move == 'E': # 修复缩进错误,将分支判断放入E键的逻辑块内 if coords[0] != -2*(coords[1]) + 5: print('a') else: coords[1] += 1 elif move == 'D': coords[1] -= 1 elif move == 'W': coords[0] -= 1 elif move == 'R': coords[0] += 1 else: pass # 敌人移动逻辑 if enemy_coords[0] > coords[0]: enemy_coords[0] -= 1 elif enemy_coords[0] < coords[0]: enemy_coords[0] += 1 elif enemy_coords[1] > coords[1]: enemy_coords[1] -= 1 elif enemy_coords[1] < coords[1]: enemy_coords[1] += 1 # 循环内绘图,每次先清空画布再重绘,用pause代替阻塞的show plt.cla() plt.plot(coords[0], coords[1], 'bo', enemy_coords[0], enemy_coords[1], 'rx') plt.plot([1,2], [3,1]) plt.xlim(-5,5) plt.ylim(-5,5) plt.pause(0.1) # 游戏结束关闭交互模式 plt.ioff() plt.show()
额外说明
- 修复后的代码统一了缩进规范,所有分支逻辑层级符合Python语法要求
- 开启Matplotlib交互模式后,循环内每次重绘只需要短暂暂停刷新画面,不会阻塞输入逻辑,也不会反复触发新窗口导致后端崩溃
- 新增了画布清空逻辑
plt.cla(),避免每次循环绘制的点和线层层叠加在画布上 - 把无意义的
coords = coords替换为pass,减少无效运算
内容的提问来源于stack exchange,提问作者AiB22
相关产品推荐
相关产品推荐

