假设我有一个尝试并且有一个例外......在实时制作(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?
答案 0 :(得分: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-graypy/
答案 1 :(得分: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块中手动将错误发送到其中一个时才会起作用。
答案 2 :(得分:0)
我建议将以上解决方案重定向到解释WePay错误的页面,并结合使用pypi上提供的django-wepay应用程序,其中包含所有错误的记录,以及可选的所有调用。