Mohammed
Mohammed

Reputation: 2943

How to ignore deprecation warnings in Python

I keep getting this :

DeprecationWarning: integer argument expected, got float

How do I make this message go away? Is there a way to avoid warnings in Python?

Upvotes: 276

Views: 403695

Answers (18)

seralouk
seralouk

Reputation: 33147

None of these answers worked for me so I will post my way to solve this. I use the following at the beginning of my main.py script and it works fine.


Use the following as it is (copy-paste it):

def warn(*args, **kwargs):
    pass
import warnings
warnings.warn = warn

or 1-liner, thanks Philippe Remy 's comment

import warnings ; warnings.warn = lambda *args,**kwargs: None

Example:

def warn(*args, **kwargs):
    pass
import warnings
warnings.warn = warn


import "blabla"
import "blabla"

# more code here...
# more code here...

Upvotes: 66

Logan Walker
Logan Walker

Reputation: 1

To add to previous solutions, if you continue to receive warnings in certain parallel applications (such as those that use multiprocessing, it is possible that the warning filters need to be passed to child processes as well. You can do that with something like this:

import sys, os

if not sys.warnoptions:
    import warnings
    warnings.simplefilter("ignore")
    
    os.environ["PYTHONWARNINGS"] = "ignore"

Adding the os.environ line will cause subprocesses to also ignore warnings.

Upvotes: 0

Lorenzo
Lorenzo

Reputation: 187

A bit rough, but it worked for me after the above methods did not.

./myscrypt.py 2>/dev/null

Upvotes: -2

ruloweb
ruloweb

Reputation: 764

If you are using logging (https://docs.python.org/3/library/logging.html) to format or redirect your ERROR, NOTICE, and DEBUG messages, you can redirect the WARNINGS from the warning system to the logging system:

logging.captureWarnings(True)

It will capture the warnings with the tag "py.warnings". Also if you want to throw away those warnings without logging, you can then, set the logging level to ERROR by using:

logging.getLogger("py.warnings").setLevel(logging.ERROR)

It will cause all those warnings to be ignored without showing up in your terminal or anywhere else.

See https://docs.python.org/3/library/warnings.html and https://docs.python.org/3/library/logging.html#logging.captureWarnings and captureWarnings set to True doesn't capture warnings

In my case, I was formatting all the exceptions with the logging system, but warnings (e.g. scikit-learn) were not affected.

Upvotes: 8

Marcello DeSales
Marcello DeSales

Reputation: 22349

Docker Solution

  • Disable ALL warnings before running the python application
    • You can disable your dockerized tests as well
ENV PYTHONWARNINGS="ignore::DeprecationWarning"

Upvotes: 23

Aqueel khaja
Aqueel khaja

Reputation: 1

Comment out the warning lines in the below file:

lib64/python2.7/site-packages/cryptography/__init__.py

Upvotes: -13

Amar Kumar
Amar Kumar

Reputation: 2646

Try the below code if you're Using Python3:

import sys

if not sys.warnoptions:
    import warnings
    warnings.simplefilter("ignore")

or try this...

import warnings

def fxn():
    warnings.warn("deprecated", DeprecationWarning)

with warnings.catch_warnings():
    warnings.simplefilter("ignore")
    fxn()

or try this...

import warnings
warnings.filterwarnings("ignore")

Upvotes: 3

Ashish Anand
Ashish Anand

Reputation: 2743

For python 3, just write below codes to ignore all warnings.

from warnings import filterwarnings
filterwarnings("ignore")

Upvotes: 3

Dipen Gajjar
Dipen Gajjar

Reputation: 1458

Python 3

Just write below lines that are easy to remember before writing your code:

import warnings

warnings.filterwarnings("ignore")

Upvotes: 7

Statham
Statham

Reputation: 4118

If you know what you are doing, another way is simply find the file that warns you(the path of the file is shown in warning info), comment the lines that generate the warnings.

Upvotes: -1

Trideep Rath
Trideep Rath

Reputation: 3703

When you want to ignore warnings only in functions you can do the following.

import warnings
from functools import wraps


def ignore_warnings(f):
    @wraps(f)
    def inner(*args, **kwargs):
        with warnings.catch_warnings(record=True) as w:
            warnings.simplefilter("ignore")
            response = f(*args, **kwargs)
        return response
    return inner

@ignore_warnings
def foo(arg1, arg2):
    ...
    write your code here without warnings
    ...

@ignore_warnings
def foo2(arg1, arg2, arg3):
    ...
    write your code here without warnings
    ...

Just add the @ignore_warnings decorator on the function you want to ignore all warnings

Upvotes: 8

Stephan202
Stephan202

Reputation: 61579

From documentation of the warnings module:

 #!/usr/bin/env python -W ignore::DeprecationWarning

If you're on Windows: pass -W ignore::DeprecationWarning as an argument to Python. Better though to resolve the issue, by casting to int.

(Note that in Python 3.2, deprecation warnings are ignored by default.)

Upvotes: 158

Eddy Pronk
Eddy Pronk

Reputation: 6705

I had these:

/home/eddyp/virtualenv/lib/python2.6/site-packages/Twisted-8.2.0-py2.6-linux-x86_64.egg/twisted/persisted/sob.py:12:
DeprecationWarning: the md5 module is deprecated; use hashlib instead import os, md5, sys

/home/eddyp/virtualenv/lib/python2.6/site-packages/Twisted-8.2.0-py2.6-linux-x86_64.egg/twisted/python/filepath.py:12:
DeprecationWarning: the sha module is deprecated; use the hashlib module instead import sha

Fixed it with:

import warnings

with warnings.catch_warnings():
    warnings.filterwarnings("ignore",category=DeprecationWarning)
    import md5, sha

yourcode()

Now you still get all the other DeprecationWarnings, but not the ones caused by:

import md5, sha

Upvotes: 250

ismail
ismail

Reputation: 47662

You should just fix your code but just in case,

import warnings
warnings.filterwarnings("ignore", category=DeprecationWarning) 

Upvotes: 338

Tristan Havelick
Tristan Havelick

Reputation: 69368

I found the cleanest way to do this (especially on windows) is by adding the following to C:\Python26\Lib\site-packages\sitecustomize.py:

import warnings
warnings.filterwarnings("ignore", category=DeprecationWarning)

Note that I had to create this file. Of course, change the path to python if yours is different.

Upvotes: 34

SpliFF
SpliFF

Reputation: 39014

Not to beat you up about it but you are being warned that what you are doing will likely stop working when you next upgrade python. Convert to int and be done with it.

BTW. You can also write your own warnings handler. Just assign a function that does nothing. How to redirect python warnings to a custom stream?

Upvotes: -4

Gonzalo Quero
Gonzalo Quero

Reputation: 3333

Convert the argument to int. It's as simple as

int(argument)

Upvotes: 3

shylent
shylent

Reputation: 10086

Pass the correct arguments? :P

On the more serious note, you can pass the argument -Wi::DeprecationWarning on the command line to the interpreter to ignore the deprecation warnings.

Upvotes: 5

Related Questions