【问题标题】:Django Error Reporting Simple Syntax ErrorsDjango 错误报告简单语法错误
【发布时间】:2013-11-28 07:58:00
【问题描述】:

我是 Django 的新手,正在学习本教程。如果我像标准脚本一样运行文件,我粗略地编写了一些代码,这些代码通常会引发语法错误或名称错误。但是,当我尝试使用manage.py runserver 在我的网络浏览器中浏览视图时,我只是得到一个没有相关错误/回溯的空白页面。我运行manage.py runserver 的控制台也是如此——它只显示GET 请求。另外,启动服务器时,控制台显示“发现0个错误”,这显然是错误的。

我的问题是 Django 如何报告错误和回溯?我需要启用什么吗? (我的 settings.py 文件中有DEBUG = True)这让我有点不安,我可能会打错字,突然整个网站停止工作,我没有报告问题出在哪里是。

【问题讨论】:

    标签: django error-reporting


    【解决方案1】:

    关于运行开发服务器,它会说在启动服务器时发现了0个错误。这通常是指settings.py 文件和模型中的配置和语法。它只会报告通过启动代码路径出现的错误,通常不会通过您的视图处理程序。

    当您修改文件时,开发服务器足够智能,可以自行重新加载。语法错误会导致开发服务器崩溃。

    如果您看到一个空白页面并且 GET 请求成功返回,那么从 Django 的角度来看,您的代码工作正常。它正在处理请求并返回响应,尽管您知道响应不正确。通常,此处的语法错误会导致视图返回 500,您将在其中看到在视图中返回的调试信息(如果是 DEBUG = True),您也会在控制台中看到它。您的错字似乎是有效的 python,因为它成功地通过了您的视图处理程序以返回一个空白页面。除了对 Django 的单元测试之外,你真的没有什么可以做的,一个空白页面可能是一个有效的响应。

    现在,当您从开发转向生产时,您可能想知道页面何时出现错误。 Django builds off Python's logging framework 处理错误和其他消息。 settings.py 文件中的默认值,设置一个 mail_admins 处理程序来处理 django.request 上的错误。如果您在设置文件中设置了ADMINSEMAIL_BACKEND,您将通过电子邮件收到服务器上发生的任何500 错误的堆栈跟踪。随着您越来越复杂,您可以通过向 Python 的日志记录框架和自定义处理程序发送消息来创建自己的日志记录。

    import logging
    
    logger = logging.GetLogger(__name__) #using the module name so in your settings.py you can configure different settings per module
    
    logger.info('msg')
    logger.error('msg')
    

    我建议将 Sentry 作为错误消息的处理程序,它会计数并存储错误日志。

    【讨论】:

    • 事实证明,这实际上是一个比铅更多的问题。当我使用 chrome 时,我在 Django 中没有收到任何“黄页”错误(它们只是空白)。但是,当我使用 IE 时,我得到了它们。我将使用这些详细信息创建一个新问题。
    • 这有点不准确。在启动期间,视图模块中的 语法错误 肯定会被捕获,因为 Django 需要导入视图以创建路由映射。但是,它不会捕获大多数模块中的任何 runtime 错误,但这是一个不同的问题。
    猜你喜欢
    • 2016-02-28
    • 1970-01-01
    • 2019-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-25
    • 2018-08-14
    • 1970-01-01
    相关资源
    最近更新 更多