def str2bool( string ):
    try:
        string = string.strip().lower()
        if string in ('true','yes','on'):
            return True
        elif string in ('false','no','off'):
            return False
    except:
        pass

    raise ValueError('invalid literal for boolean: "%s"' % string)


def str2type( string ):
    for convert in (str2bool,int,float,complex):
        try:
            return convert(string)
        except:
            continue
    return string
