def try_attrs(obj, *attrs, **kwargs):
    """Try to find an available attribute.

    Args:
        obj (object): Object to get the attribute value for.
        *attrs (tuple/str): Tuple of different string attribute names to try (These names may include '.' attributes).
        default (object)[None]: Default Value to return
    """
    if len(attrs) == 0:
        raise TypeError('No attributes given!')

    for attr in attrs:
        this = obj
        try:
            for at in attr.split('.'):
                this = getattr(this, at)
            return this
        except (AttributeError, Exception):
            pass

    if 'default' not in kwargs:
        raise AttributeError('Could not find attribute {} for object {}'.format(attrs[0], obj))
    return kwargs['default']