Get the error code from tweepy exception instance

前端 未结 5 625
猫巷女王i
猫巷女王i 2020-12-14 09:50

I\'m new to python and I\'m trying to use a library. It raises an exception, and I am trying to identify which one. This is what I am trying:

except tweepy.T         


        
相关标签:
5条回答
  • 2020-12-14 10:17

    How about this?

    except tweepy.TweepError as e:
        print e.message[0]['code']  # prints 34
        print e.args[0][0]['code']  # prints 34
    
    0 讨论(0)
  • 2020-12-14 10:21

    Every well-behaved exception derived from the base Exception class has an args attribute (of type tuple) that contains arguments passed to that exception. Most of the time only one argument is passed to an exception and can be accessed using args[0].

    The argument Tweepy passes to its exceptions has a structure of type List[dict]. You can get the error code (type int) and the error message (type str) from the argument using this code:

    e.args[0][0]['code']
    e.args[0][0]['message']
    

    The TweepError exception class also provides several additional helpful attributes api_code, reason and response. They are not documented for some reason even though they are a part of public API.

    So you can get the error code (type int) also using this code:

    e.api_code
    


    History:

    The error code used to be accessed using e.message[0]['code'] which no longer works. The message attribute has been deprecated in Python 2.6 and removed in Python 3.0. Currently you get an error 'TweepError' object has no attribute 'message'.

    0 讨论(0)
  • 2020-12-14 10:21

    Here is how I do it:

    except tweepy.TweepError as e:
        print e.response.status
    
    0 讨论(0)
  • 2020-12-14 10:22

    Things have changed quite a bit since 2013. The correct answer as of now is to use e.api_code.

    0 讨论(0)
  • 2020-12-14 10:22

    To get just the error code use the method monq posted. The following example illustrates how to get both the error code and the message. I had to extract the message from the e.reason string, if anyone has a better method to retrieve just the message, please share.

    Note: This code should work for any error code/reason with the following format.

    [{'code': 50, 'message': 'User not found.'}]

    def getExceptionMessage(msg):
        words = msg.split(' ')
    
        errorMsg = ""
        for index, word in enumerate(words):
            if index not in [0,1,2]:
                errorMsg = errorMsg + ' ' + word
        errorMsg = errorMsg.rstrip("\'}]")
        errorMsg = errorMsg.lstrip(" \'")
    
        return errorMsg
    

    And you can call it like so:

    try:
        # Some tweepy api call, ex) api.get_user(screen_name = usrScreenName)
    except tweepy.TweepError as e:
        print (e.api_code)
        print (getExceptionMessage(e.reason))
    
    0 讨论(0)
提交回复
热议问题