Python或Django:如何处理导入库中的异常而不导致内部服务器错误
我创建了一个库,用来连接一些远程的JSON接口。我有一个Django应用,如果我的库在连接资源时失败(比如出现504错误),就会显示内部服务器错误。下面是一个假设的例子,展示了我库的代码结构。
mymodule.py
...
class Error(Exception):
"""class placeholder for errors"""
class theObject(object):
@classmethod
def get(self, params = {}):
url = 'http://somewhere.com/collection.json%s' % (urlencode(params))
try:
response = unicode(urlopen(url).read(), 'utf8').decode()
dictionary = json.loads(response)
result = ApiObject(dictionary)
return result
except HTTPError, e:
raise Error(e.read())
except (ValueError, KeyError), e:
raise Error('Invalid Response')
class Person(theObject):
@classmethod
def get_person(cls, person_id):
params = {'id':person_id)
result = super(Stuff, cls).get(params)
return result
view.py
import mymodule
...
remote_result = module.Person.get_person(person_id=person)
...
有没有什么推荐的方法可以提醒用户资源太忙了?这样比我现在的ajax请求出现内部服务器错误要好。
谢谢!!
1 个回答
1
我解决了我的问题。现在觉得自己有点傻,因为这个解决办法实在太简单了。希望这能帮助到将来遇到同样问题的人。如果在使用的库中发生HTTP连接失败,你可以避免显示服务器错误页面,而是给客户端一个友好的通知。
你只需要找到那个处理错误的类。在这个例子中,它叫做“Error”。
import mymodule
try:
[do a bunch of things...]
except mymodule.Error:
error = "Remote servers appear to be busy. Please try again."
return HttpResponse(error)
你可以并且应该根据具体的HTTP错误来定制这个错误处理。
祝好运!