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?

astrofrog
sumber
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')
astrofrog
sumber
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>.''')
matthiash
sumber
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);
robert
sumber
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>.''')
ottowg
sumber
2

Ini berfungsi setiap saat -

import warnings
warnings.filterwarnings('ignore')
Rahul Bordoloi
sumber