Python或Django:如何处理导入库中的异常而不导致内部服务器错误

0 投票
1 回答
595 浏览
提问于 2025-04-16 19:26

我创建了一个库,用来连接一些远程的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错误来定制这个错误处理。

祝好运!

撰写回答