Все значения , конечно, «фактические строки» (вы можете делать с ними все, что вы можете делать со строками!), Но я думаю, что большинство респондентов знают, что вы имеете в виду - вы хотите попробовать Преобразование каждого значения в несколько возможных типов по очереди («int», а затем «float» - это именно то, что вы называете, но не может быть других ...?) и возвращаете и используете первое успешное преобразование.
Это, конечно, лучше всего инкапсулировать в функции, вне логики вашего приложения. Если наилучшим соответствием для ваших нужд является просто выполнить преобразование и вернуть «наилучшее преобразованное значение» (и все они будут использованы аналогично), то:
def best_convert(s, types=(int, float)):
for t in types:
try: return t(s)
except ValueError: continue
return s
если вы хотите сделать что-то свое в каждом случае, то:
def dispatch(s, defaultfun, typesandfuns):
for t, f in typesandfuns:
try:
v = t(s)
except ValueError:
continue
else:
return f(v)
return defaultfun(s)
должен называться, например, как
r = dispatch(s, asstring, ((int, asint), (float, asfloat)))
если функции, которые должны вызываться для "неконвертируемых строк", конвертируемых в int и конвертируемых в float, но не int соответственно, равны asstring
, asint
, asfloat
.
Я не рекомендую поместить «структурный», попытаться по очереди конвертировать в эти различные типы и действовать соответственно «коду» в неразрывной смеси с вашей «логикой приложения» - это очевидный случай для аккуратно наслоение двух аспектов, с хорошей структурой и разделением.