2

假设我有一个 try and catch 并且有一个异常......在现场制作(django)网站上处理这些异常/错误的正确方法是什么?

所以我有

try:
    create_response = wepay.call('/account/create',
                                 {'name': name, 'description': desc})
    self.wepay_account_id = create_response['account_id']
    self.save()
except WePay.WePayError as e:
    ..... (what do I put here?
4

3 回答 3

2

您可以通过 Django 设置电子邮件错误报告:https ://docs.djangoproject.com/en/dev/howto/error-reporting/

或者,您可以使用Rollbar 之类的服务(有免费帐户)来跟踪错误发生。

或者您可以使用自托管的 Greylog(如评论中建议的那样),这是 django 的一个很好的指南:http: //www.caktusgroup.com/blog/2013/09/18/central-logging-django-graylog2-and-灰色/

于 2013-09-19T18:48:39.770 回答
1

响应(可选地重定向到)向用户解释问题的适当页面,并在可能的情况下提供解决方案。您希望避免在生产中为您的用户提供 500 个服务,因此捕获异常是一个好主意。

所以:

except WePay.WePayError as e:
    return render_to_response('wepay_error_page.html')

或者:

except WePay.WePayError as e:
    return HttpResponseRedirect('/errors/wepay/')  # Note: better use urlresolvers

(请注意,此特定代码仅在视图中时才有效)

然后(可选)确保您获得错误的副本,例如向自己发送电子邮件。

针对这种特殊情况的建议(如果我成功解释了代码)可能是通知自己,并回复一个页面,向用户解释他们的付款出错了。告诉他们这可能是由于他们的行为(也许他们取消了付款)而发生的,并在用户认为这不是他们的错时提供联系方式。

默认情况下,Django 将所有 500 个错误发送到 settings.ADMINS 邮件(当邮件配置正确时),但这些仅发生在未捕获的异常中,因此在这个特定问题中,像 Rollbar 或中央日志记录解决方案这样的服务只有在您重新引发异常时才能工作(将导致 500)或在 catch 块中手动将错误发送到其中之一。

于 2013-09-20T22:39:03.757 回答
0

我建议将上述解决方案重定向到解释 WePay 错误的页面,并结合使用pypi 上可用的django-wepay应用程序,该应用程序具有记录所有错误和可选的所有调用的功能。

于 2014-01-22T03:34:14.043 回答