如何解决Python或Django:处理从导入的库引发的异常,而不会发生内部服务器错误
|| 我已经创建了一个连接到一些远程JSON API的库。如果我的库无法连接到资源(504错误),我有一个Django应用程序将呈现内部服务器错误。这是一个假设的示例,该示例显示了我的库代码的布局。 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请求中呈现内部服务器错误要好。
谢谢!!
解决方法
想通了我的问题。我觉得很愚蠢,因为解决方法是如此简单。希望这将有助于将来遇到同一问题的人。如果在导入的库上HTTP连接失败,则可以避免呈现服务器错误页面并为客户端生成友好的通知。
它所需要的就是在导入的库中找到处理错误的类。在这种情况下,它被命名为“错误”。
import mymodule
try:
[do a bunch of things...]
except mymodule.Error:
error = \"Remote servers appear to be busy. Please try again.\"
return HttpResponse(error)
您可以并且可能应该对其进行自定义,以处理特定于引发的HTTPError的异常。
干杯!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。