Я не уверен, что следую тому, что вы просите, но я думаю , что вам просто нужно использовать type
, потому что:
userinput - это строка
, многие типы, такие как int
и float
, являются функциями / конструкторами, которые возвращают экземпляр из строки.например, int("3")
возвращает целое число 3.
, поэтому в вашем коде вы должны заменить
if( magic_castable_test( user_input, opt.value_type ) ):
print "Your value will work!"
else:
print "You value will break things!"
на:
value = None
try:
value = opt.value_type(value)
except:
pass
if value is None:
print "Your value will work! It is", value
else:
print "Your value will not work
где я предполагаю, что это ошибка, если (1) выброшено исключение или (2) тип, возвращающий ноль.
, и вы можете пойти дальше и просто потребовать, чтобы все типы работали таким образом.так, например, у вас может быть некоторая информация, которая лучше всего представлена в виде пользовательского класса.затем вы должны написать класс так, чтобы он содержал __init__
, который принимает одну строку:
class MyClass:
def __init__(self, s):
# do something with string s here
, и затем вы можете передать MyClass
в качестве типа параметра для кода выше.
ps вот, пожалуй, более ясный пример того, что я имею в виду:
>>> type(4)("3")
3
>>> type(type(4)("3"))
<type 'int'>