I am working with code with throws a lot of (for me at the moment) useless warnings using the
warnings library. Reading (/scanning) the documentation I only found a way to disable warnings for single functions. But I don’t want to change so much of the code.
Is there maybe a flag like
python -no-warning foo.py?
What would you recommend?
There’s the -W option.
python -W ignore foo.py
Did you look at the suppress warnings section of the python docs?
If you are using code that you know will raise a warning, such as a deprecated function, but do not want to see the warning, then it is possible to suppress the warning using the catch_warnings context manager:
import warnings def fxn(): warnings.warn("deprecated", DeprecationWarning) with warnings.catch_warnings(): warnings.simplefilter("ignore") fxn()
I don’t condone it, but you could just surpress all warnings with this:
import warnings warnings.filterwarnings("ignore")
>>> import warnings >>> def f(): ... print('before') ... warnings.warn('you are warned!') ... print('after') >>> f() before __main__:3: UserWarning: you are warned! after >>> warnings.filterwarnings("ignore") >>> f() before after
You can also define an environment variable (new feature in 2010 – i.e. python 2.7)
Test like this: Default
$ export PYTHONWARNINGS="default" $ python >>> import warnings >>> warnings.warn('my warning') __main__:1: UserWarning: my warning >>>
$ export PYTHONWARNINGS="ignore" $ python >>> import warnings >>> warnings.warn('my warning') >>>
warnings are output via stderr and the simple solution is to append ‘2> /dev/null’ to the CLI. this makes a lot of sense to many users such as those with centos 6 that are stuck with python 2.6 dependencies (like yum) and various modules are being pushed to the edge of extinction in their coverage.
this is especially true for cryptography involving SNI et cetera. one can update 2.6 for HTTPS handling using the proc at:
the warning is still in place, but everything you want is back-ported. the re-direct of stderr will leave you with clean terminal/shell output although the stdout content itself does not change.
responding to FriendFX. sentence one (1) responds directly to the problem with an universal solution. sentence two (2) takes into account the cited anchor re ‘disable warnings’ which is python 2.6 specific and notes that RHEL/centos 6 users cannot directly do without 2.6. although no specific warnings were cited, para two (2) answers the 2.6 question I most frequently get re the short-comings in the cryptography module and how one can “modernize” (i.e., upgrade, backport, fix) python’s HTTPS/TLS performance. para three (3) merely explains the outcome of using the re-direct and upgrading the module/dependencies.