@classmethod
    def _make_udt_tuple_type(cls, name, field_names):
        # fallback to positional named, then unnamed tuples
        # for CQL identifiers that aren't valid in Python,
        try:
            t = namedtuple(name, field_names)
        except ValueError:
            try:
                t = namedtuple(name, util._positional_rename_invalid_identifiers(field_names))
                log.warn("could not create a namedtuple for '%s' because one or more field names are not valid Python identifiers (%s); " \
                         "returning positionally-named fields" % (name, field_names))
            except __HOLE__:
                t = None
                log.warn("could not create a namedtuple for '%s' because the name is not a valid Python identifier; " \
                         "will return tuples in its place" % (name,))
        return t
dataset/ETHPy150Open datastax/python-driver/cassandra/cqltypes.py/UserType._make_udt_tuple_type