运行Pygame时出现‘Python意外退出’及CAMetalLayer错误求助
解决Pygame在Mac上调用
pygame.display.set_mode()时崩溃的问题 我之前也碰到过一模一样的问题!这是Mac系统版本和Pygame依赖的SDL2库之间的兼容性bug——SDL2的Metal渲染器尝试调用一个当前系统里CAMetalLayer类不存在的方法setDisplaySyncEnabled:,直接导致Python进程崩溃。给你几个快速解决的方案:
方案一:强制使用OpenGL渲染器(最快捷)
在调用set_mode的时候,指定使用OpenGL渲染模式,绕开Metal相关的bug:
import pygame pygame.init() # 强制使用OpenGL渲染,避免Metal兼容性问题 screen = pygame.display.set_mode((500, 500), pygame.OPENGL)
如果需要窗口可调整大小,也可以结合参数:
screen = pygame.display.set_mode((500, 500), pygame.OPENGL | pygame.RESIZABLE)
方案二:更新Pygame到最新版本
旧版本的Pygame绑定的SDL2库可能存在这个兼容性问题,通过更新Pygame可以修复:
打开终端执行更新命令:
pip install --upgrade pygame
如果你用的是conda环境,换成这条命令:
conda update pygame
方案三:调整系统版本(可选)
这个bug通常出现在较旧的MacOS版本中,如果上述方案都无效,且你的设备支持,可以尝试更新到较新的MacOS版本;或者如果是新系统出现问题,也可以考虑回退到稳定兼容的版本(不过这个操作成本较高,优先尝试前两个方案)
错误日志关键信息解析
你日志里的核心错误是这行:
2020-12-30 17:12:41.797 Python[683:12026] -[CAMetalLayer setDisplaySyncEnabled:]: unrecognized selector sent to instance 0x7fb453e60250
它说明SDL2的Metal渲染模块尝试调用一个当前系统不支持的Objective-C方法,触发了未捕获的异常,最终导致Python进程意外退出。
内容的提问来源于stack exchange,提问作者Bach Nguyen




