Сховати всі попередження в ipython


300

Мені потрібно створити скріншот сеансу ipython, і щоб не заплутати глядачів, я хочу відключити всі попередження, випромінювані warnings.warnдзвінками з різних пакетів. Чи є спосіб налаштувати файл ipythonrc для автоматичного відключення всіх таких попереджень?


3
зауважте, коли ви можете, ви повинні прийняти свою відповідь, а потім перейдіть до перевірки інших ваших запитань і перевірте, чи є у них прийнятні відповіді.
Ден Д.

Відповіді:


716

Зрештою я зрозумів це. Місце:

import warnings
warnings.filterwarnings('ignore')

всередині ~/.ipython/profile_default/startup/disable-warnings.py. Я залишаю це запитання і відповідаю на запис, якщо хтось інший зіткнеться з тим же питанням.

Досить часто корисно один раз побачити попередження. Це можна встановити:

warnings.filterwarnings(action='once')

8
Також працює для попереджень ноутбука IPython. Приємне виправлення :)
Кіт Хагітт

6
@FrozenFlame, ви повернете його до "за замовчуванням" Див.: Docs.python.org/2/library/warnings.html
AZhao

36
Ви також можете виконати це в зошиті, щоб придушити лише (певні) попередження в одному конкретному зошиті
Васко

Зі мною трапляється щось дивне, я працюю над зошитом Kaggle, і навіть якщо warnings.filterwarnings('ignore')на початку мого сценарію, я все одно отримую попередження. Чи має це бути пов’язано з тим, що я використовую прискорювач TPU, чи має ТПУ особливу поведінку в цьому випадку ... Цікаво. Я не розумію.
Каталіна Чірку

57

Я ховаю попередження у рожеві поля, запускаючи наступний код у комірці:

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
Незважаючи на голосування, все-таки вважайте, що це була корисна порада, оскільки її легше перемикати, порівняно з прийнятою відповіддю.
matthiash

Я люблю це рішення. Я зберег у зовнішньому модулі та додав до імпорту.
Адам

3
Це більше не працює з лабораторією юпітера (хоча було б здорово, якби :)
Ajasja

1
Це спрацювало ! прийнята відповідь не допомогла мені. Дякую @matthiash
Gonzalo Garcia

4

Прийнята відповідь не працює в Юпітері (принаймні, при використанні деяких бібліотек).

Тут рішення Javascript приховують лише попередження, які вже відображаються, але не попередження, які відображатимуться в майбутньому.

Щоб приховати / приховати попередження в Jupyter та JupyterLab, я написав наступний сценарій, який по суті перемикає css, щоб приховати / приховати попередження.

%%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);

Я отримую помилку "Помилка Javescript: $ не визначено"
Бен

@Ben ви використовуєте jupyter у браузері? Ноутбуки в VSCode не завантажують $ (jQuery)
robert

Так, я (Google Chrome)
Бен

Працює як шарм! Дякую!
Дуглас Далі

Не працює і для мене. Я отримую ту ж помилку, що і Бен (я використовую JupyterLab).
Тобіас Бергквіст

2

Для лабораторії юпітера це має працювати (@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>.''')

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.