运行Manim示例时遭遇IndexError的解决方法求助
刚学Manim,Python基础薄弱,运行Manim Kindergarten示例代码manimgl example_scenes.py OpeningManimExample时触发索引越界错误,报错指向vectorized_mobject.py文件的has_new_path_started方法,具体错误为:
IndexError: index -3 is out of bounds for axis 0 with size 0
完整报错栈如下:
Traceback (most recent call last): File "D:\Python310\lib\runpy.py", line 196, in _run_module_as_main return _run_code(code, main_globals, None, File "D:\Python310\lib\runpy.py", line 86, in _run_code exec(code, run_globals) File "D:\Python310\Scripts\manimgl.exe\__main__.py", line 7, in <module> File "C:\Users\10447\Desktop\manim\manimlib\__main__.py", line 25, in main scene.run() File "C:\Users\10447\Desktop\manim\manimlib\scene\scene.py", line 148, in run self.construct() File "C:\Users\10447\Desktop\manim\.\example_scenes.py", line 14, in construct intro_words = Text(""" File "C:\Users\10447\Desktop\manim\manimlib\mobject\svg\text_mobject.py", line 425, in __init__ super().__init__( File "C:\Users\10447\Desktop\manim\manimlib\mobject\svg\text_mobject.py", line 130, in __init__ super().__init__(text, height=height, **kwargs) File "C:\Users\10447\Desktop\manim\manimlib\mobject\svg\string_mobject.py", line 68, in __init__ super().__init__( File "C:\Users\10447\Desktop\manim\manimlib\mobject\svg\svg_mobject.py", line 76, in __init__ self.init_svg_mobject() File "C:\Users\10447\Desktop\manim\manimlib\mobject\svg\svg_mobject.py", line 104, in init_svg_mobject submobs = self.mobjects_from_file(self.get_file_path()) File "C:\Users\10447\Desktop\manim\manimlib\mobject\svg\string_mobject.py", line 115, in mobjects_from_file submobs = super().mobjects_from_file(file_path) File "C:\Users\10447\Desktop\manim\manimlib\mobject\svg\svg_mobject.py", line 132, in mobjects_from_file return self.mobjects_from_svg(svg) File "C:\Users\10447\Desktop\manim\manimlib\mobject\svg\svg_mobject.py", line 187, in mobjects_from_svg mob = self.path_to_mobject(shape) File "C:\Users\10447\Desktop\manim\manimlib\mobject\svg\svg_mobject.py", line 240, in path_to_mobject return VMobjectFromSVGPath(path, **self.path_string_config) File "C:\Users\10447\Desktop\manim\manimlib\mobject\svg\svg_mobject.py", line 306, in __init__ super().__init__(**kwargs) File "C:\Users\10447\Desktop\manim\manimlib\mobject\types\vectorized_mobject.py", line 113, in __init__ super().__init__(**kwargs) File "C:\Users\10447\Desktop\manim\manimlib\mobject\mobject.py", line 110, in __init__ self.init_points() File "C:\Users\10447\Desktop\manim\manimlib\mobject\svg\svg_mobject.py", line 314, in init_points self.handle_commands() File "C:\Users\10447\Desktop\manim\manimlib\mobject\svg\svg_mobject.py", line 352, in handle_commands if self.has_new_path_started(): File "C:\Users\10447\Desktop\manim\manimlib\mobject\types\vectorized_mobject.py", line 502, in has_new_path_started return self.consider_points_equal(points[-3], points[-2]) IndexError: index -3 is out of bounds for axis 0 with size 0
这个错误本质是解析SVG文本路径时生成了空的点集合,大概率和字体、版本兼容性有关,按以下步骤排查:
检查并替换字体
示例代码里的Text可能调用了系统未安装的字体,导致SVG路径生成异常。修改example_scenes.py中的Text初始化代码,指定系统已安装的字体,比如:intro_words = Text("""你的文本内容""", font="Arial")或者直接用ManimGL内置的
Tex替代Text,TeX渲染对字体兼容性更好:intro_words = Tex("""你的文本内容""")调整Python版本
Python3.10和旧版ManimGL存在兼容性问题,建议降级到Python3.8或3.9,这两个版本是ManimGL稳定支持的版本。修复
vectorized_mobject.py代码
直接修改报错方法,避免空列表索引:找到C:\Users\10447\Desktop\manim\manimlib\mobject\types\vectorized_mobject.py文件的has_new_path_started方法,修改为:def has_new_path_started(self): points = self.points if len(points) < 3: return True return self.consider_points_equal(points[-3], points[-2])当点集合长度不足3时直接返回True,避免索引越界。
重新克隆ManimGL仓库
若本地ManimGL代码存在损坏,删除当前manim文件夹,重新克隆官方仓库并安装:git clone https://github.com/3b1b/manim.git cd manim pip install -e .之后再运行示例代码。
内容的提问来源于stack exchange,提问作者拉格朗日插值多项式

