异常应该捕获DeadlineExceededError异常吗? [英] Should Exception catch DeadlineExceededError exceptions?

查看:785
本文介绍了异常应该捕获DeadlineExceededError异常吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有如下代码:

try:
    response = urlfetch.Fetch(url, deadline=60, headers=headers, follow_redirects=False)
except Exception, error_message:
    logging.exception('Failed, exception happened - %s' % error_message)

,但有时会失败,并出现 DeadlineExceededError ?我的代码不应该捕获此 DeadlineExceededError 吗?

but sometimes it fails with DeadlineExceededError? Should not this DeadlineExceededError be caught by my code?

异常详细信息:

Traceback (most recent call last):
  File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/runtime/wsgi.py", line 266, in Handle
    result = handler(dict(self._environ), self._StartResponse)
  File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py", line 1529, in __call__
    rv = self.router.dispatch(request, response)
  File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py", line 1278, in default_dispatcher
    return route.handler_adapter(request, response)
  File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py", line 1102, in __call__
    return handler.dispatch()
  File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py", line 570, in dispatch
    return method(*args, **kwargs)
  File "/base/data/home/apps/s~myapp/1.375970700643773844/myapp.py", line 424, in get
    url, response = call_api(origin=origin, destination=destination, date=date_.strftime('%Y-%m-%d'))
  File "/base/data/home/apps/s~myapp/1.375970700643773844/myapp.py", line 288, in call_api
    response = urlfetch.Fetch(url, deadline=60, headers=headers, follow_redirects=False)
  File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/api/urlfetch.py", line 270, in fetch
    return rpc.get_result()
  File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/api/apiproxy_stub_map.py", line 612, in get_result
    return self.__get_result_hook(self)
  File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/api/urlfetch.py", line 375, in _get_fetch_result
    rpc.check_success()
  File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/api/apiproxy_stub_map.py", line 585, in check_success
    self.__rpc, err)
  File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/api/apiproxy_stub_map.py", line 196, in Call
    for key, function, srv, num_args in self.__content:
DeadlineExceededError


推荐答案

要回答您的特定问题,应该我的代码不会捕获这个DeadlineExceededError吗?:

To answer your specific question, "Should not this DeadlineExceededError be caught by my code?":

DeadlineExceededError 类扩展了 BaseException 而不是 Exception ,因此您的except子句将永远不会被调用。

The DeadlineExceededError class extends BaseException instead of Exception, so your except clause will never be called.

from google.appengine.runtime import DeadlineExceededError
my_error = DeadlineExceededError()
isinstance(my_error, Exception)  # False
isinstance(my_error, BaseException)  # True

这篇关于异常应该捕获DeadlineExceededError异常吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆