0

我试过这个:

def string_to_value(self, old_value, distribution_type, new_value_str):
    parameter_names = distribution_type.parameters  # a list of string
    try:
        parameter_values = ast.literal_eval(new_value_str)  # a tuple or basic type hopefully
    except SyntaxError:
        raise ValueError('Syntax error during parse')
    retval = copy.copy(old_value)
    try:
        if len(parameter_names) == 1:
            setattr(retval, parameter_names[0], parameter_values)
        else:
            if len(parameter_names) != len(parameter_values):
                raise BoostPythonArgumentError
            for parm_name, parm_value in zip(parameter_names,
                                             parameter_values):
                setattr(retval, parm_name, parm_value)
    except BoostPythonArgumentError:
        raise ValueError('Lots of helpful text here')
    return retval

这适用于很多情况。parm_valueBoost.Python在设定的时间自动检查类型。不幸的是,它不适用于包含“inf”的字符串。 当我希望它返回浮点数时ast.literal_eval引发。ValueError('malformed string')我不明白 Python 如何解析“inf”,但literal_eval 不能。

4

3 回答 3

1

检查此文档此 PEP 关于评估inf。我想他们会帮忙的

于 2011-06-02T10:10:18.777 回答
0

需要评估吗?例如

a = "(1,2,3,4)"
b = tuple(a.strip('( )').split(','))
assert ('1','2','3','4') == b
于 2011-06-02T09:00:15.247 回答
0

如果所有元素都具有相同的数字类型,则此方法有效:

numpy.fromstring('1.3, 2.2, 5, inf, 2', sep=',')

返回

array([ 1.3,  2.2,  5. ,  inf,  2. ])
于 2011-06-02T16:52:17.737 回答