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

これは多くの場合に機能します。Boost.Pythonはparm_value、設定された時間にのタイプを自動的にチェックします。残念ながら、「inf」を含む文字列では機能しません。 フロートを戻したいときにast.literal_evalレイズします。ValueError('malformed string')Pythonが「inf」を解析する方法がわかりませんが、literal_evalは解析できません。

4

3 に答える 3

1

infの評価については、このドキュメントこの PEPを確認してください。私は彼らが助けると思います

于 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 に答える