如何禁用警告过滤?
我想输出多次相同的警告,但是库中的过滤器避免多次输出相同的警告。
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"
,但我不知道该怎么做以及在何处访问该元组。
答案 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")
我希望它有用