Django异常处理 - 从服务器端捕获ghost错误

时间:2016-09-04 10:46:39

标签: django exception-handling

我有一个Django视图,负责为服务器端的图形渲染提供原始数据。当我在本地运行应用程序时(我的机器上有Windows 10),一切正常。但是当我从远程服务器(它的Ubuntu)运行应用程序时,我得到500错误。这种类型的错误(当相同的代码在本地,但远程失败时),对我来说是一个严重的问题,因为在每一个这样的场合,它都会导致非常耗时 - 而且看似不专业 - 识别和修复它们的过程。我的问题是,什么是神奇的异常处理代码片段,它将帮助我通过详细的异常消息到客户端控制台。

更具体地说,请考虑以下内容(我故意按原样提供代码):

Django观点:

def graph_vendors_black_white(request):

    try:
        legal_entity_own_qs = get_sale_points(request.user.id)  

        list = []
        data = [x.blacknwhite_agreement_count(True) for x in legal_entity_own_qs]
        list.append({'name':u'В белую', 'data':data});
        data = [x.blacknwhite_agreement_count(False) for x in legal_entity_own_qs]
        list.append({'name':u'В чёрную', 'data':data});
        data = [x.blacknwhite_agreement_count(None) for x in legal_entity_own_qs]
        list.append({'name':u'Не выбрана опция', 'data':data});
        legal_entity_own_list = [unicode(x.short_identifier_rus) for x in legal_entity_own_qs]
        json_response = JsonResponse({'time_series':json.dumps(list,                   ensure_ascii=False).encode('utf8'),'categories':json.dumps(legal_entity_own_list,  ensure_ascii=False).encode('utf8')})
        return json_response
    except:
        user_msg, tech_msg = default_error_msg()

        return JsonResponse(user_msg + '\n ' + tech_msg, status = 500, safe = False)

def default_error_msg():
    user_msg = u'Что-то пошло не так'
    exc_type, exc_obj, exc_tb = sys.exc_info()
    fname = os.path.split(exc_tb.tb_frame.f_code.co_filename)[1]
    try: 
        console_msg = exc_obj[1]
    except:
        console_msg = str(exc_obj.message)
    tech_msg = ('File - ' + fname + ' on line ' + str(exc_tb.tb_lineno) + '. \n' + \
                'Error message - ' + console_msg + '\n' + \
                'Exception type - ' + str(type(exc_obj)))             
    return user_msg, tech_msg   

JS:

$.get('/graph_vendors_black_white/', function (response) 
{
   // ... some code
}).fail(function(json_result) {
    $('#black_white_container').html(json_result.responseJSON)
});

当我在本地运行时,它完全没问题。从远程服务器,它会抛出500错误,最令人惊讶的是json_result不包含错误消息。然而,如果我放置a = 1/0之类的东西,我会在容器中而不是图形中收到错误消息。

总而言之,问题是,什么是通用异常处理代码片段,它将详细的错误消息发送到fail - 函数响应参数NO MATTER THE ERROR在服务器端

0 个答案:

没有答案