Python,禁用警告过滤器

时间:2018-10-08 13:44:06

标签: python warnings

如何禁用警告过滤?

我想输出多次相同的警告,但是库中的过滤器避免多次输出相同的警告。

import warnings

for i in range(2):
    warnings.warn("warning message")

输出:

C:\Users\me\my_script.py:4: UserWarning: warning message
  warnings.warn("warning message")

文档在这里: https://docs.python.org/2/library/warnings.html

显然,我必须在过滤器条目的元组中设置"always",但我不知道该怎么做以及在何处访问该元组。

2 个答案:

答案 0 :(得分:1)

您可以使用warnings.simplefilter()warnings.filterwarnings() functions更新警告过滤器;来自模块介绍:

  

是否发出警告消息的确定由警告过滤器控制,警告过滤器是一系列匹配的规则和操作。可以通过调用@Configuration public class JpaConfig { private final JdbcTemplate jdbcTemplate; public JpaConfig(JdbcTemplate jdbcTemplate) { this.jdbcTemplate = jdbcTemplate; } @Bean public LocalContainerEntityManagerFactoryBean entityManagerFactoryBean(JdbcTemplate jdbcTemplate){ LocalContainerEntityManagerFactoryBean emf = new ExtendedLocalContainerEntityManagerFactoryBean(jdbcTemplate.getExceptionTranslator()); emf.setDataSource(jdbcTemplate.getDataSource()); emf.setPackagesToScan("com.github.ankurpathak.hibernatedemo"); emf.setJpaVendorAdapter(new ExtendedHibernateJpaVendorAdaptor(jdbcTemplate.getExceptionTranslator())); Properties jpaProperties = new Properties(); jpaProperties.setProperty("hibernate.dialect", "org.hibernate.dialect.H2Dialect"); jpaProperties.setProperty("hibernate.show_sql", String.valueOf(Boolean.TRUE)); jpaProperties.setProperty("hibernate.format_sql", String.valueOf(Boolean.TRUE)); jpaProperties.setProperty("hibernate.hbm2ddl.auto", "validate"); emf.setJpaProperties(jpaProperties); return emf; } } 将规则添加到过滤器,并通过调用filterwarnings()将规则重置为默认状态。

要使所有警告均重复出现在第一个问题之后,请使用

resetwarnings()

您可以通过添加更多详细信息来进行扩展。例如,您的warnings.simplefilter('always') 调用未指定类别,因此默认设置是使用warnings.UserWarning;您可以将其添加到过滤器中:

warnings.warn()

等如果只想指定一些过滤器参数,例如warnings.simplefilter('always', warnings.UserWarning) ,也可以使用关键字参数。

答案 1 :(得分:0)

对于python 2.7.15rc1,要禁用所有警告,我使用了以下两行代码:

import warnings
warnings.simplefilter("ignore")

我希望它有用