J'ai essayé ceci:Quelle est la meilleure façon d'analyser un tuple à partir d'une chaîne en Python?
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
Cela fonctionne pour beaucoup de cas. Boost.Python vérifie automatiquement le type de parm_value
à l'heure définie. Malheureusement, cela ne fonctionne pas sur les chaînes contenant 'inf'. ast.literal_eval
soulève ValueError('malformed string')
quand je voudrais qu'il retourne un flotteur. Je ne comprends pas comment Python peut analyser 'inf', mais literal_eval ne le peut pas.
Merci. Cela me rapproche. Mais, j'aimerais utiliser literal_eval au lieu d'eval. –