【问题标题】:pyhocon - force a variable to have float type (instead of str)pyhocon - 强制变量具有浮点类型(而不是 str)
【发布时间】:2019-08-25 12:44:02
【问题描述】:

我正在使用 pyhocon 包,我希望将其中一个参数作为 int/int 除法给出。 conf 文件如下所示:

{
  var = 1/3
}

但是,这是我尝试得到的结果:

>>> from pyhocon import ConfigFactory
>>> conf = ConfigFactory.parse_file(conf_path)
>>> conf.var
 '1/3'
>>> conf.get_float('var')
pyhocon.exceptions.ConfigException: var has type 'str' rather than 'float'

如何强制var 具有浮点类型? (不使用某种eval

【问题讨论】:

    标签: python python-3.x configuration


    【解决方案1】:

    3/4 不是浮点数。 0.75 是。您需要先“计算”您的字符串。

    使用

    {
      var = 0.75
    }
    

    改为。


    或者:

    import operator  
    
    k =  operator.truediv( *map(int,"3/4".split("/")))  # conf.var
    print(k)
    

    0.75

    【讨论】:

    • 您对 3/4 的具体选择是正确的。这不是我的本意。我已经更新了它。所以 1/3 你将无法完成第一个“技巧”
    • 这不是“技巧” - 一个浮点数最接近1/30.33333333333 .. 里面还有一些 3。你可以通过operator.truediv( *map(int,"1/3".split("/"))) 得到它......如果你想使用 real fractions,请参阅我的其他答案。
    • 这不是“多一些 3”,而是无限多 3。即使你说浮点数是有限的,我仍然不想依赖机器中的浮点表示,或者输入整个每次更改参数时的十进制表示。但实际上,这只是让我的问题过于复杂。你的“替代”部分是我正在寻找的,谢谢
    【解决方案2】:

    可能 eval 是最简单的

    In [3]: conf['var'] = eval(conf['var'])  
    In [4]: conf.get_float('var')                                                                                                                                                   
    Out[4]: 0.75
    

    【讨论】:

      【解决方案3】:

      如果您想在程序中使用fractions,请为其使用正确的数据类型:

      import fractions 
      
      k =  fractions.Fraction( "1/3" )  # you use conf.var instead of '1/3'  
      print(k)
      print(float(k))
      

      输出:

      Fraction(1, 3)  
      0.3333333333333333
      

      fraction.Fraction(string) 适用于您的 conf.var

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-02-23
        • 1970-01-01
        • 2016-02-18
        • 1970-01-01
        • 2015-08-17
        • 2013-09-10
        • 2019-03-25
        • 2021-03-19
        相关资源
        最近更新 更多