在这个问题中,“单位”是指物理量中使用的“计量单位”。
我想安全地解析一个包含物理量(例如“23kg”)的不可信用户输入字符串。我想使用Python可用的包之一(比如Unum或quantitys),因为它们负责单位之间的转换、数学表达式中包含的单位的简化、基本单位的简化,但是除了使用eval()
之外,我找不到一种将字符串转换为对象的方法,这看起来不安全。在
例如,假设kg
和cm
绑定到Unumpackage对象并引用千克和厘米单位,那么我需要一个能够从字符串返回Unumpackage对象的函数,类似于:
cast_to_unit("100 kg/cm")
或者
"100 kg/cm".asUnit()
eval()
?如果没有
你可以自己写一些东西,像这样重载操作符:
然后可以使用
^{pr2}$eval()
来计算表达式(比如“100*kg
”),但要小心。或许这可以帮助你解决一些问题:快速浏览一下} 执行类似的操作:
Unum
的documentation,似乎您应该能够使用^{如果您这样做,请确保阅读了
eval
的文档,以及如何传递本地和全局映射,以限制命名空间访问,使其更安全,尤其是如果您计划将此代码发布给外部世界时。您可能还需要检查字符串中是否有下划线(_
),而不允许将这些下划线传递给eval
。在正如kindall所指出的,导入
^{pr2}$*
通常不是好的风格。这里有一个更安全的替代方法,它可以避免从*
导入:请注意,我删去了
__
方法,如本文post所提倡的相关问题 更多 >
编程相关推荐