Одна из возможностей - попробовать различные типы в точной последовательности, по умолчанию str
, если ни один из них не работает.Например:
def what_type(s, possible_types=((int, [0]), (float, ()))):
for t, xargs in possible_types:
try: t(s, *xargs)
except ValueError: pass
else: return t
return str
Это особенно рекомендуется, конечно, когда вы хотите использовать те же синтаксические соглашения, что и в Python - например, принять '0x7e'
как int
, а также '126'
и так далее.Если вам нужны другие соглашения о синтаксисе, вам следует вместо этого выполнить синтаксический анализ строки s
, либо через RE, либо другими способами.