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?

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


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) 

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

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.


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


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.


5

Solusi Docker

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


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


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")

2

Python 3

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

import warnings

warnings.filterwarnings("ignore")

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.


0

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

from warnings import filterwarnings
filterwarnings("ignore")

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


4
Nasihat itu hanya berfungsi jika itu memang kodenya sendiri dan bukan dari paket pihak ke-3.
Christopher Barber
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.