我用谷歌搜索了这个错误,发现之前没有人遇到过这个 ValueError。您可以从下面的回溯日志中看到该错误是由我的代码行触发的
bg_color = run.font.highlight_color
我猜 python-docx
库遇到了一些它无法处理的奇怪情况?也许是 docx 中包含的一些 WD_COLOR_INDEX
值是 python-docx 无法识别的。
如果 python-docx 遇到并放置在没有 font.hightlight_color 的地方,它应该只返回 None 给我,而不是尝试从某些 xml 映射中获取翻译值。
我该如何解决这个问题?
Traceback (most recent call last):
File "XXX.py", line 377, in <module>
main()
...
bg_color = run.font.highlight_color
File "/home/xxx/.local/lib/python3.8/site-packages/docx/text/font.py", line 139, in highlight_color
return rPr.highlight_val
File "/home/xxx/.local/lib/python3.8/site-packages/docx/oxml/text/font.py", line 183, in highlight_val
return highlight.val
File "/home/xxx/.local/lib/python3.8/site-packages/docx/oxml/xmlchemy.py", line 254, in get_attr_value
return self._simple_type.from_xml(attr_str_value)
File "/home/xxx/.local/lib/python3.8/site-packages/docx/enum/base.py", line 64, in from_xml
raise ValueError(f"{cls.__name__} has no XML mapping for '{xml_value}'")
ValueError: WD_COLOR_INDEX has no XML mapping for 'none'
我尝试找出原因。因此,我将目标 docx 减少为仅会触发错误的关键内容。然后我将 docx 重命名为 xxx.zip 并解压缩。我查看
document.xml
文件并看到一些如下代码:<w:highlight w:val="none"/><w:shd w:val="clear" w:fill="F7FAFC"/>
。
当时我想我已经找到了ValueError问题的原因了。 python-docx 库不期望 Word 文件具有(字体)hightlight 属性,其值为
"none"
。
由于这是一个库错误,而我的目的是检测突出显示的运行,因此我只是将代码包装在 try- except 块周围。