【问题标题】:How to know which exception type to catch in python?如何知道在 python 中捕获哪种异常类型?
【发布时间】:2012-10-27 08:00:43
【问题描述】:

一般异常捕获器记录以下异常:

> 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

我想知道具体的异常名称,以便为它添加专用的捕获。 怎么找到?

捕获的异常是否有“类型”函数,或者是否应该在抛出库的源代码中找到它 - 可用 here

【问题讨论】:

  • 看起来这是一个RateLimitExceeded 异常。不过,可以肯定的是,我会将其包装在 try/except Exception as e 中并打印 e.__class__。这会给你一个明确的答案
  • 谢谢正在寻找类似 e.__class__ 的东西!

标签: python exception types


【解决方案1】:

这最初是一条评论,但由于它得到了很多赞,并且 OP 声称这是他们正在寻找的东西,所以我将其重新发布为答案:

看起来这是一个 RateLimitExceeded 异常。不过,如果你真的想确定,你可以这样做:

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

这将打印出引发的异常类,这将为您提供明确的答案

【讨论】:

    【解决方案2】:

    粘贴中引发的异常是foursquare.RateLimitExceeded(如最后一行所述)。如果您想处理模块中的所有错误,您应该能够正常捕获它,或者捕获它的基类foursquare.FoursquareException

    引发异常的代码只是从字典中查找要引发的异常类。这应该不会对您如何捕获这些错误产生任何影响。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-16
      • 1970-01-01
      相关资源
      最近更新 更多