Pint库自定义molar_energy派生维度调用get_compatible_units报KeyError
Pint自定义派生维度调用get_compatible_units报错的原因
这个问题的根因是你仅完成了派生维度的别名定义,没有完成Pint识别该维度可用单位的全流程配置,具体分为两点:
- Pint的
get_compatible_units方法依赖内置的dimensional_equivalents缓存查询对应量纲的单位列表,这个缓存默认仅收录Pint内置维度对应的量纲条目。你定义的[molar_energy]会被解析为量纲容器<UnitsContainer({'[length]': 2, '[mass]': 1, '[substance]': -1, '[time]': -2})>,但该量纲并未预先加入缓存,直接查询就会触发KeyError。 - 即使你后续将对应量纲加入缓存,如果没有给
[molar_energy]维度注册任何实际可用的单位(如kJ/mol、cal/mol等),方法的返回结果也会为空列表。
修复方法
你可以选择任意一种方案解决该问题:
- 给自定义维度注册至少一个对应单位,Pint会自动将对应的量纲加入缓存:
# 定义完派生维度后补充单位注册 UR.define('joule_per_mole = J / mol = J/mol')
- 直接使用基础维度组合作为入参调用,不需要依赖自定义维度别名:
UR.get_compatible_units('[energy]/[substance]')
内容的提问来源于stack exchange,提问作者Rufus
相关产品推荐
相关产品推荐

