"filterwarnings"

Peter Otten __peter__ at web.de
Wed Aug 26 03:32:31 EDT 2020


Stefan Ram wrote:

>   I'm not sure I understand "filterwarnings" correctly.
>   It does not suppress the warning within the "with" statement below.
>   Outside of the "with" statement, it does work, but according
>   to sources it also should work within the "with" statement.
> 
>   Console transcript:
> 
> |Python 3.9....
> |Type "help", "copyright", "credits" or "license" for more information.
> |>>> import warnings
> |>>> with warnings.catch_warnings():
> |...     warnings.filterwarnings("ignore", category=SyntaxWarning)
> |...     print( 1 is 1 )
> |...
> |<stdin>:3: SyntaxWarning: "is" with a literal. Did you mean "=="?
> |True
> |>>> warnings.filterwarnings("ignore", category=SyntaxWarning)
> |>>> print( 1 is 1 )
> |True
> 
>   How could I make "filterwarnings" work inside the "with" statement?
>   TIA!

It does work already:

>>> with warnings.catch_warnings():
...     warnings.filterwarnings("ignore", category=UserWarning)
...     warnings.warn("yadda")
... 
>>> warnings.warn("yadda")
<stdin>:1: UserWarning: yadda

The problem is that you picked the wrong category. As SyntaxWarnings are 
issued during compilation you need to trigger a compilation to see the 
effect:

>>> with warnings.catch_warnings():
...     warnings.filterwarnings("ignore", category=SyntaxWarning)
...     exec("1 is 1")
... 
>>> exec("1 is 1")
<string>:1: SyntaxWarning: "is" with a literal. Did you mean "=="?



More information about the Python-list mailing list