Cara mengabaikan peringatan penghentian dalam Python

176

Saya terus mendapatkan ini:

DeprecationWarning: integer argument expected, got float

Bagaimana saya membuat pesan ini hilang? Apakah ada cara untuk menghindari peringatan dengan Python?

Mohammed
sumber

Jawaban:

121

Dari dokumentasi warningsmodul :

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

Jika Anda menggunakan Windows: berikan -W ignore::DeprecationWarningargumen ke Python. Lebih baik menyelesaikan masalah, dengan melakukan casting ke int .

(Perhatikan bahwa dalam Python 3.2, peringatan penghentian diabaikan secara default.)

Stephan202
sumber
8
Saya berharap saya bisa membuat ini berfungsi ... Saya mendapatkan /usr/bin/env: python -W ignore::DeprecationWarning: No such file or directorykesalahan. Ini berfungsi jika saya menjalankan python dengan -W ignore::DeprecationWarningopsi pada command-line, tetapi / usr / bin / env tidak menghadapinya.
weronika
4
Tampaknya menjadi solusi windows-only.
Daniel Miles
15
Anda dapat mengatur variabel env PYTHONWARNINGS ini berfungsi untuk saya export PYTHONWARNINGS="ignore::DeprecationWarning:simplejson"untuk menonaktifkan peringatan deprication django json dari sorl
yvess
@yvess, jika ini jawaban, saya akan memilihnya. Tampaknya cara yang bersih untuk mengabaikan peringatan khusus di seluruh sistem. Saya taruh di profil ~ /. Saya. Bagus sekali.
allanberry
Hai, bisakah kita mengubah pesan Peringatan Penghentian ini menjadi pesan informasi jenis. Yang saya inginkan hanyalah menampilkan pesan di konsol agar tidak dikategorikan sebagai jenis peringatan apa pun.
Krishna Oza
194

Anda hanya harus memperbaiki kode Anda tetapi untuk berjaga-jaga,

import warnings
warnings.filterwarnings("ignore", category=DeprecationWarning) 
ismail
sumber
2
Bekerja untuk saya menggunakan iPython
zbinsd
21
Ini tidak bekerja untuk saya sama sekali, masih melihat penghinaan usang.
user1244215
8
@ user1244215 Saya bisa salah, tapi saya pikir itu penting di mana dalam kode Anda Anda jalankan warnings.filterwarnings("ignore", category=DeprecationWarning). Saya pikir Anda harus menjalankan ini setelah Anda mengimpor perpustakaan yang memuntahkan peringatan, meskipun saya bisa salah.
Jack Kelly
1
@CodingYourLife kategori diperlukan sehingga Anda masih akan melihat jenis peringatan lain seperti RuntimeWarning dll.
ismail
1
Dalam kasus saya, kode yang menyebabkan peringatan itu from xgboost import XGBClassifier. Saya harus meletakkan warnings.filterwarnings("ignore", category=DeprecationWarning)sebelum impor itu agar berfungsi.
sedeh
193

Saya punya ini:

/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

Memperbaikinya dengan:

import warnings

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

yourcode()

Sekarang Anda masih mendapatkan semua yang lain DeprecationWarning, tetapi bukan yang disebabkan oleh:

import md5, sha
Eddy Pronk
sumber
2
Luar biasa, terima kasih banyak !! (Butuh beberapa saat untuk menyadari bahwa saya juga bisa membungkus bit kode non-impor dalam hal ini, karena beberapa paket juga menghasilkan DeprecationWarnings ketika digunakan setelah impor.) Cara yang sangat bagus untuk hanya membungkam DeprecationWarnings spesifik yang telah saya lihat dan putuskan Saya ingin mengabaikan.
weronika
29

Saya menemukan cara terbersih untuk melakukan ini (terutama di windows) adalah dengan menambahkan yang berikut ke C: \ Python26 \ Lib \ situs-paket \ sitecustomize.py:

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

Perhatikan bahwa saya harus membuat file ini. Tentu saja, ubah jalur ke python jika milik Anda berbeda.

Tristan Havelick
sumber
26

Tidak satu pun dari jawaban ini yang berfungsi untuk saya sehingga saya akan memposting cara saya untuk menyelesaikan ini. Saya menggunakan at the beginning of my main.pyskrip berikut dan berfungsi dengan baik.


Gunakan yang berikut ini (copy-paste):

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

Contoh:

import "blabla"
import "blabla"

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

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

seralouk
sumber
4
Itu bekerja ketika semua solusi lain tidak. Terima kasih!
cxxl
Ini menyelamatkan saya juga. Senang saya bisa membantu.
seralouk
Tidak berfungsi di 3.7.3 untuk peringatan penghentian AstroPy. :(
ingyhere
Bekerja untuk saya, terima kasih :)
valkyrie55
kabar baik ! sorakan
seralouk
6

Lewati argumen yang benar? : P

Pada catatan yang lebih serius, Anda bisa meneruskan argumen -Wi :: DeprecationWarning pada baris perintah ke penerjemah untuk mengabaikan peringatan penghentian.

shylent
sumber
5

Solusi Docker

  • Nonaktifkan SEMUA peringatan sebelum menjalankan aplikasi python
    • Anda dapat menonaktifkan tes buruh pelabuhan Anda juga
ENV PYTHONWARNINGS="ignore::DeprecationWarning"
Marcello de Sales
sumber
4

Konversi argumen ke int. Sesederhana itu

int(argument)
Gonzalo Quero
sumber
4

Saat Anda ingin mengabaikan peringatan hanya dalam fungsi, Anda dapat melakukan hal berikut.

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
    ...

Cukup tambahkan dekorator @ignore_warnings pada fungsi yang ingin Anda abaikan semua peringatan

Trideep Rath
sumber
3

Coba kode di bawah ini jika Anda Menggunakan Python3:

import sys

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

atau coba ini ...

import warnings

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

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

atau coba ini ...

import warnings
warnings.filterwarnings("ignore")
Amar Kumar
sumber
2

Python 3

Cukup tulis di bawah baris yang mudah diingat sebelum menulis kode Anda:

import warnings

warnings.filterwarnings("ignore")
Dipen Gajjar
sumber
0

Jika Anda tahu apa yang Anda lakukan, cara lain adalah dengan menemukan file yang memperingatkan Anda (jalur file ditampilkan dalam info peringatan), beri komentar pada baris yang menghasilkan peringatan.

Statham
sumber
0

Untuk python 3, cukup tulis kode di bawah ini untuk mengabaikan semua peringatan.

from warnings import filterwarnings
filterwarnings("ignore")
Ashish Anand
sumber
-2

Bukan untuk mengalahkan Anda tentang hal itu tetapi Anda sedang diperingatkan bahwa apa yang Anda lakukan kemungkinan akan berhenti bekerja ketika Anda meng-upgrade python berikutnya. Konversikan ke int dan selesai dengannya.

BTW. Anda juga dapat menulis penangan peringatan Anda sendiri. Cukup tetapkan fungsi yang tidak melakukan apa pun. Bagaimana cara mengarahkan peringatan python ke aliran khusus?

SPIFF
sumber
4
Nasihat itu hanya berfungsi jika itu memang kodenya sendiri dan bukan dari paket pihak ke-3.
Christopher Barber