如何过滤导入过程中发生的不推荐警告?

2024-05-28 21:02:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我们正在将应用程序从django1.6更新到1.7。在

我们看到很多这样的信息:RemovedInDjango18Warning

有没有办法过滤它们?它们在导入过程中发射。在

我们尝试了warnings.filterwarnings('ignore', '...'),但是在调用warnings.filterwarnings()之前,警告就会发出。在

如何过滤导入过程中发生的这些警告?在


Tags: 信息应用程序警告过程ignore办法warningsfilterwarnings
1条回答
网友
1楼 · 发布于 2024-05-28 21:02:58

快速修复

要仅在运行manage.py时使其静音,请在import sys之后添加以下行:

# ...
import sys

if not sys.warnoptions:
    sys.warnoptions += [None]

# ...

如果您还想让它在WSGI服务器(即Apache)中静音,请更新your_project/wsgi.py,并在import os之后添加以下行:

^{pr2}$

解释

这是因为django.utils.log.configure_logging()如何处理它:

def configure_logging(logging_config, logging_settings):
    if not sys.warnoptions:
        # Route warnings through python logging
        logging.captureWarnings(True)
        # RemovedInNextVersionWarning is a subclass of DeprecationWarning which
        # is hidden by default, hence we force the "default" behavior
        warnings.simplefilter("default", RemovedInNextVersionWarning)
    # ...

它在启动过程的早期被故意调用为django.setup()的一部分,这解释了为什么在您能够使错误在堆栈中更深入地静音之前发出错误。在

sys.warnoptions添加新元素将强制它计算为True,绕过逻辑。这是无害的,因为当由warnings模块加载时,它是only used during python startup。在

RemovedInNextVersionWarning只是^{} in Django 1.7的别名。它被设置为^{} in 1.8,依此类推,对于将来的版本,此代码应该是这种类型的DeprecationWarning的未来证明。在


命令行方法

注意,sys.warnoptions通常是在python启动期间根据调用python时的^{} argument设置的。因此,在使用dev服务器时,一个简单的方法是使警告静音python -W123 manage.py runserver。这不需要修改文件,但会在启动时产生一个无害的警告,因为123只是一个占位符,不是有效的警告操作。在

另一种方法是python -Wi::DeprecationWarning manage.py runserver,尽管这将忽略所有DeprecationWarning,包括可能不{}的感兴趣的。在

相关问题 更多 >

    热门问题