【发布时间】:2021-04-13 14:14:49
【问题描述】:
我想在视图中设计一个错误处理函数,并在视图中不同的主要功能中使用它。 此错误处理函数将收集所需的错误信息,将错误记录到系统,并将这些信息呈现到错误处理页面。
view.py 中的代码如下:
def error_manage(request, error_title, error_detail):
error_time = datetime.now()
info_table = {'error_title': error_title,
'error_detail': error_detail,
'error_time ': error_time ,
}
logger.error(str(error_detail))
return render(request,'home/error_manage.html', {'error_title': error_title,
'info_table ': display_table})
def my_page_1(request):
try:
var1 = my_calculation_func()
except Exception as ex:
error_manage(request, "Unexpected Error Happened.", ex)
var2 = my_calculation_func2()
var3 = my_calculation_func3()
return render(request,'home/my_page_1.html', {'var1': var1 ,'var2': var2 ,'var3': var3})
这里的问题是,当var1发生错误时,程序会跳转到error_manage,但不会在这个函数的返回中停止,也不会成功渲染到error_manage.html中。
它稍后会跳出这个函数并继续运行 var2 和 var3,直到它遇到 my_page_1() 中的最终返回。
我知道我可以简单地将error_manage 中的return 语句放在异常下的my_page_1 中。 但是这个错误处理程序将在 view.py 中的许多其他函数中使用,我不想一遍又一遍地重复它。
这个问题有好的解决方案吗?谢谢。
【问题讨论】:
-
我会将您的错误处理程序编写为装饰器函数,然后将其用作您要使用它的视图的装饰器。
-
也许你需要
raise自定义异常?
标签: python django error-handling django-views