Sembunyikan semua peringatan di ipython


300

Saya perlu membuat screencast dari sesi ipython, dan untuk menghindari pemirsa yang membingungkan, saya ingin menonaktifkan semua peringatan yang dipancarkan oleh warnings.warnpanggilan dari paket yang berbeda. Apakah ada cara untuk mengkonfigurasi file ipythonrc untuk secara otomatis menonaktifkan semua peringatan seperti itu?


3
perhatikan kapan Anda bisa, Anda harus menerima jawaban Anda, dan kemudian periksa pertanyaan Anda yang lain dan lihat apakah mereka memiliki jawaban yang dapat diterima.
Dan D.

Jawaban:


716

Saya akhirnya menemukan jawabannya. Tempat:

import warnings
warnings.filterwarnings('ignore')

di dalam ~/.ipython/profile_default/startup/disable-warnings.py. Saya meninggalkan pertanyaan dan jawaban ini sebagai catatan seandainya ada orang lain yang menemukan masalah yang sama.

Cukup sering ada gunanya melihat peringatan satu kali. Ini dapat diatur oleh:

warnings.filterwarnings(action='once')

8
Juga berfungsi untuk peringatan notebook IPython. Perbaikan yang bagus :)
Keith Hughitt

6
@FrozenFlame, Anda mengubahnya kembali ke 'default' Lihat: docs.python.org/2/library/warnings.html
AZhao

36
Anda juga dapat menjalankan ini di notebook, untuk menekan hanya peringatan (tertentu) dalam satu notebook tertentu
Vasco

Sesuatu yang aneh terjadi pada saya, saya mengerjakan notebook Kaggle, dan bahkan jika saya atur warnings.filterwarnings('ignore')di awal skrip saya, saya tetap mendapat peringatan. Jika dikaitkan dengan fakta bahwa saya menggunakan akselerator TPU, apakah TPU memiliki perilaku tertentu dalam kasus ini ... Saya ingin tahu. Saya tidak mengerti.
Catalina Chircu

57

Saya menyembunyikan peringatan di kotak merah muda dengan menjalankan kode berikut di sel:

from IPython.display import HTML
HTML('''<script>
code_show_err=false; 
function code_toggle_err() {
 if (code_show_err){
 $('div.output_stderr').hide();
 } else {
 $('div.output_stderr').show();
 }
 code_show_err = !code_show_err
} 
$( document ).ready(code_toggle_err);
</script>
To toggle on/off output_stderr, click <a href="javascript:code_toggle_err()">here</a>.''')

2
Meskipun downvote, masih percaya itu adalah tip yang berguna, karena lebih mudah untuk beralih, dibandingkan dengan jawaban yang diterima.
matthiash

Saya suka solusi ini. Saya menyimpan dalam modul eksternal dan menambahkan ke impor.
Adam

3
Ini tidak lagi berfungsi dengan lab jupyter (meskipun akan keren jika mau :)
Ajasja

1
Berhasil! jawaban yang diterima tidak membantu saya. Terima kasih @matthiash
Gonzalo Garcia

4

Jawaban yang diterima tidak berfungsi di Jupyter (setidaknya ketika menggunakan beberapa perpustakaan).

Solusi Javascript di sini hanya menyembunyikan peringatan yang sudah ditampilkan tetapi bukan peringatan yang akan ditampilkan di masa mendatang.

Untuk menyembunyikan / menyembunyikan peringatan di Jupyter dan JupyterLab saya menulis skrip berikut yang pada dasarnya mengaktifkan css untuk menyembunyikan / menyembunyikan peringatan.

%%javascript
(function(on) {
const e=$( "<a>Setup failed</a>" );
const ns="js_jupyter_suppress_warnings";
var cssrules=$("#"+ns);
if(!cssrules.length) cssrules = $("<style id='"+ns+"' type='text/css'>div.output_stderr { } </style>").appendTo("head");
e.click(function() {
    var s='Showing';  
    cssrules.empty()
    if(on) {
        s='Hiding';
        cssrules.append("div.output_stderr, div[data-mime-type*='.stderr'] { display:none; }");
    }
    e.text(s+' warnings (click to toggle)');
    on=!on;
}).click();
$(element).append(e);
})(true);

Saya menerima kesalahan "Kesalahan Javescript: $ tidak didefinisikan"
Ben

@ Apakah Anda menggunakan jupyter di browser? Notebook dalam VSCode tidak memuat $ (jQuery)
robert

Ya, saya lakukan (Google Chrome)
Ben

Bekerja seperti pesona! Terima kasih!
Douglas Daly

Juga tidak bekerja untuk saya. Saya mendapatkan kesalahan yang sama dengan Ben (Saya menggunakan JupyterLab).
Tobias Bergkvist

2

Untuk lab jupyter ini seharusnya berfungsi (@Alasja)

from IPython.display import HTML
HTML('''<script>
var code_show_err = false; 
var code_toggle_err = function() {
 var stderrNodes = document.querySelectorAll('[data-mime-type="application/vnd.jupyter.stderr"]')
 var stderr = Array.from(stderrNodes)
 if (code_show_err){
     stderr.forEach(ele => ele.style.display = 'block');
 } else {
     stderr.forEach(ele => ele.style.display = 'none');
 }
 code_show_err = !code_show_err
} 
document.addEventListener('DOMContentLoaded', code_toggle_err);
</script>
To toggle on/off output_stderr, click <a onclick="javascript:code_toggle_err()">here</a>.''')

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.