Django 错误报告简单语法错误

Posted

技术标签:

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

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

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

【问题讨论】:

【参考方案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 错误,但这是一个不同的问题。

以上是关于Django 错误报告简单语法错误的主要内容,如果未能解决你的问题,请参考以下文章

django中的语法错误

为啥 MySQL 会在 FULL OUTER JOIN 上报告语法错误?

为啥 MySQL 会在 FULL OUTER JOIN 上报告语法错误?

我在 django 项目中有 python 语法错误

Django - 在 javascript 函数中使用 和 % % 标签时出现语法错误

在 django 中处理视图语法错误与异常