<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def get_followers(id_=None, screen_name=None, limit=1e10):
 """ Either id_ or screen_name must not be None. """

    # FIXME: DRY from _tweets_for_user
    if not (id_ or screen_name):
        raise Exception("either id_ or screen_name must not be None")
    if id_:
        key = 'user_id'
        val = id_
    else:
        key = 'screen_name'
        val = screen_name
    cursor = -1
    followers = []
    while len(followers) < limit:
        try:
            response = twapi.request('followers/ids', {key: val, 'count': 5000,
                                                       'cursor': cursor, 'stringify_ids': True})
            if response.status_code in [88, 130, 420, 429]:  # rate limit
                sys.stderr.write('Error for %s: %s\nSleeping for 5 minutes...\n' % (val, response.text))
                time.sleep(300)
            elif response.status_code != 200:
                sys.stderr.write('Skipping bad user: %s\n' % response.text)
                return followers
            else:
                result = json.loads(response.text)
                items = [r for r in response]
                if len(items) == 0:
                    return followers
                else:
                    sys.stderr.write('fetched %d more followers for %s\n' % (len(items), val))
                    time.sleep(1)
                    followers.extend(items)
                    if len(followers) >= limit:
                        return followers[:limit]
                cursor = result['next_cursor']
        except Exception as e:
            sys.stderr.write('Error: %s\nskipping...\n' % e)
            sys.stderr.write(traceback.format_exc())
            return followers
    return followers