Скрыть все предупреждения в ipython

300

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

astrofrog
источник
3
обратите внимание, когда вы можете принять ваш ответ, а затем проверить другие вопросы и посмотреть, есть ли у них приемлемые ответы.
Дэн Д.

Ответы:

716

В конце концов я понял это. Место:

import warnings
warnings.filterwarnings('ignore')

внутри ~/.ipython/profile_default/startup/disable-warnings.py. Я оставляю этот вопрос и отвечаю для протокола на случай, если кто-то еще столкнется с той же проблемой.

Довольно часто полезно увидеть предупреждение один раз. Это может быть установлено:

warnings.filterwarnings(action='once')
astrofrog
источник
8
Также работает для предупреждений IPython ноутбука. Хорошее исправление :)
Кит Хьюджитт
6
@FrozenFlame, вы меняете его обратно на «по умолчанию». См .: docs.python.org/2/library/warnings.html
AZhao
36
Вы также можете выполнить это в записной книжке, чтобы подавить только (определенные) предупреждения в одной конкретной записной книжке
Vasco
Что-то странное случается со мной, я работаю над записной книжкой Kaggle, и даже если я укажу warnings.filterwarnings('ignore')начало сценария, я все равно получу предупреждения. Должно ли это быть связано с тем, что я использую ускоритель ТПУ, имеет ли ТПУ определенное поведение в этом случае ... Интересно. Я не понимаю.
Каталина Чирку
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>.''')
matthiash
источник
2
Несмотря на отрицательное мнение, все же считаю, что это полезный совет, так как его легче переключать по сравнению с принятым ответом.
Маттиаш
Я люблю это решение. Я сохранил во внешнем модуле и добавил в импорт.
Адам
3
Это больше не работает с лабораторией Jupyter (хотя было бы здорово, если бы это было :)
Ajasja
1
Это сработало ! принятый ответ не помог мне. Спасибо @matthiash
Гонсало Гарсия
4

Принятый ответ не работает в Jupyter (по крайней мере, при использовании некоторых библиотек).

Решения 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)
Роберт
Да, я делаю (Google Chrome)
Бен
Работает как шарм! Спасибо!
Дуглас Дейли
У меня тоже не работает. Я получаю ту же ошибку, что и Бен (я использую JupyterLab).
Тобиас Бергквист
2

Для лаборатории Jupyter это должно работать (@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
источник
2

Это работает каждый раз -

import warnings
warnings.filterwarnings('ignore')
Рахул Бордолой
источник