Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to know which exception type to catch in python?

A general exception catcher logs the following exception:

> Traceback (most recent call last):   File "4sq.py", line 37, in
> <module>
>     checkin = client.checkins()   File "/usr/local/lib/python2.7/dist-packages/foursquare-20120716-py2.7.egg/foursquare/__init__.py",
> line 416, in __call__
>     return self.GET('{CHECKIN_ID}'.format(CHECKIN_ID=CHECKIN_ID), params, multi=multi)   File
> "/usr/local/lib/python2.7/dist-packages/foursquare-20120716-py2.7.egg/foursquare/__init__.py",
> line 217, in GET
>     return self.requester.GET(self._expanded_path(path), *args, **kwargs)   File "/usr/local/lib/python2.7/dist-packages/foursquare-20120716-py2.7.egg/foursquare/__init__.py",
> line 163, in GET
>     return self._request(url)   File "/usr/local/lib/python2.7/dist-packages/foursquare-20120716-py2.7.egg/foursquare/__init__.py",
> line 200, in _request
>     return _request_with_retry(url, data)['response']   File "/usr/local/lib/python2.7/dist-packages/foursquare-20120716-py2.7.egg/foursquare/__init__.py",
> line 696, in _request_with_retry
>     return _process_request_with_httplib2(url, data)   File "/usr/local/lib/python2.7/dist-packages/foursquare-20120716-py2.7.egg/foursquare/__init__.py",
> line 719, in _process_request_with_httplib2
>     return _check_response(data)   File "/usr/local/lib/python2.7/dist-packages/foursquare-20120716-py2.7.egg/foursquare/__init__.py",
> line 742, in _check_response
>     raise exc(meta.get('errorDetail')) RateLimitExceeded: Quota exceeded

I would like to know the specific exception name so I could add a dedicated catch to it. How can it be found?

Is there a 'type' function on the caught exception or should it be found in the throwing lib's source - available here

like image 889
user971956 Avatar asked Nov 07 '12 09:11

user971956


2 Answers

This was originally a comment, but since it got a lot of upvotes and the OP claims it was what they were looking for, I'm reposting it as an answer:

It looks like it's a RateLimitExceeded exception. Though, if you really want to be sure, you could do this:

try:
    # code
except Exception as e:
    print e.__class__

This would print out the exception class that was raised, which will give you a definitive answer

like image 92
inspectorG4dget Avatar answered Sep 22 '22 11:09

inspectorG4dget


The exception being raised in the paste is foursquare.RateLimitExceeded (as it says in the final line). You should be able to catch it as normal, or catch its base class foursquare.FoursquareException if you want to handle all errors from the module.

The code that raises the exception is just looking up which exception class to raise from a dictionary. That shouldn't have any effect on how you catch those errors.

like image 37
James Henstridge Avatar answered Sep 26 '22 11:09

James Henstridge