2012-10-27 50 views
2

我已经设置了mod_wsgi来提供python文件。确实如此。但是,如果我在.py文件中有语法错误(例如缩进错误),那么当页面加载时,我会收到服务器错误,并且必须转到日志以查看错误发生的原因(即缩进)在网页上显示mod_wsgi错误

是否有可能让mod_wsgi在页面上显示错误(至少对于dev环境)?

可能类似于php的error_reporting选项。

回答

3

不完全。你可以得到最接近的是:

http://code.google.com/p/modwsgi/wiki/DebuggingTechniques#Error_Catching_Middleware

这将仅适用于实际传播到WSGI服务器级别的请求的执行过程中发生的错误做。

对于加载WSGI sript本身的错误,或者在使用框架并且框架本身捕获错误并将其转换为500页的情况下,它将不起作用。在后者中,框架通常具有启用调试页面的手段。

现在,这听起来像你没有使用框架,但正在编写原始的WSGI脚本。如果您不熟悉Python Web编程,则不建议使用原始WSGI。因此,请使用框架,它应该为您提供您想要的功能。

1

通过一些工作(很多感谢其他Stack Overflow贡献者!),您可以获得良好的错误信息给浏览器。当然,您的WSGI“根”位于“应用程序”定义中:

def application(environ, start_response): 
    import linecache, sys 
    try: 
     from cgi import parse_qs, escape  # Application starts here 
     start_response('200 OK', [('Content-type', 'text/html'),]) #to here 
     return ["Whatever application wants to say."] 

    except:         # Error output starts here 
     exc_type, exc_obj, tb = sys.exc_info() 
     f = tb.tb_frame 
     lineno = tb.tb_lineno 
     filename = f.f_code.co_filename 
     linecache.checkcache(filename) 
     line = linecache.getline(filename, lineno, f.f_globals) 
     es = '''Error in {}, Line {} "{}": {}'''.format(filename, lineno, line.strip(), exc_obj) 
     start_response('200 OK', [('Content-type', 'text/html'),]) 
     return [es]