6

したがって、特定のタイプに値をキャストする必要があります。

if 'int' == type_name:
    value = int(value)
elif 'str' == type_name:
    value = str(value)
...

それを一般的に行う方法はありますか?例えば:

type_instance = get_type_instance(type_name)
value = type_instance(value)

私はPython2.7を使用していますが、Python3.Xソリューションにも興味があります。

アップデート:

これが私が使用している解決策です:

class Token:

    def __init__(self, type_name, value):
        self.type = type_name
        self.value = __builtins__[type_name](value) # not safe

これは単なるおもちゃのパーサーです。本番環境では使用しないでください。

4

3 に答える 3

7

dictを構築する

TYPES = {
  'int' : int,
  'str' : str,
...
}

value = TYPES[type_name](value)
于 2012-08-29T13:08:02.627 に答える
7

__builtins__タイプだけが必要な場合は、

value = getattr(__builtins__, type_name)(value)
于 2012-08-29T13:09:44.217 に答える
0

以前のバージョンの質問で指定float64したので、numpyタイプの取得にも関心があると思いました。その場合、次の関数でこれを解決できます。

def can_typecast(type, value):        
    try:
        tp = getattr(__builtins__, type)
    except AttributeError:
        try:
            np = __import__('numpy')
            tp = getattr(np, type)
            if not isinstance(tp, type):
                raise ValueError('type string is not a type')
        except AttributeError:
            raise ValueError('Invalid type specified')
        except ImportError:
            raise ValueError('Numpy not found')
    try:
        tp(value)
    except ValueError:
        return False
    return True

これは、最初に、指定された型名を組み込み型に解決できるかどうかを確認します。それが失敗した場合は、タイプ名がnumpyで見つかるかどうか、有効なタイプオブジェクトであるかどうかを確認し、有効な場合はキャスト操作を試行します。

于 2017-11-15T14:02:25.303 に答える