Ẩn tất cả các cảnh báo trong ipython


300

Tôi cần tạo một bản ghi âm của phiên ipython và để tránh gây nhầm lẫn cho người xem, tôi muốn tắt tất cả các cảnh báo phát ra từ warnings.warncác cuộc gọi từ các gói khác nhau. Có cách nào để định cấu hình tệp ipythonrc để tự động vô hiệu hóa tất cả các cảnh báo như vậy không?


3
lưu ý khi nào bạn có thể nên chấp nhận câu trả lời của mình, sau đó đi kiểm tra các câu hỏi khác của bạn và xem họ có câu trả lời nào được chấp nhận không.
Dan D.

Câu trả lời:


716

Cuối cùng tôi đã tìm ra nó. Địa điểm:

import warnings
warnings.filterwarnings('ignore')

bên trong ~/.ipython/profile_default/startup/disable-warnings.py. Tôi sẽ để lại câu hỏi này và trả lời cho hồ sơ trong trường hợp có ai khác gặp phải vấn đề tương tự.

Rất thường xuyên để xem cảnh báo một lần. Điều này có thể được thiết lập bởi:

warnings.filterwarnings(action='once')

8
Cũng hoạt động cho các cảnh báo máy tính xách tay IPython.
Sửa

6
@FrozenFlame, bạn thay đổi nó trở lại 'mặc định' Xem: docs.python.org/2/library/warnings.html
AZhao

36
Bạn cũng có thể thực hiện điều này trong sổ ghi chép, để chỉ loại bỏ các cảnh báo (nhất định) trong một sổ ghi chép cụ thể
Vasco

Một cái gì đó kỳ lạ xảy ra với tôi, tôi làm việc trên máy tính xách tay Kaggle và ngay cả khi tôi đặt warnings.filterwarnings('ignore')ở đầu kịch bản của mình, tôi vẫn nhận được cảnh báo. Nếu nó liên quan đến việc tôi sử dụng máy gia tốc TPU, thì TPU có hành vi cụ thể nào trong trường hợp này không ... tôi tự hỏi. Tôi không hiểu.
Catalina Chircu

57

Tôi ẩn các cảnh báo trong các ô màu hồng bằng cách chạy đoạn mã sau trong một ô:

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
Mặc dù downvote, vẫn tin rằng đó là một mẹo hữu ích, vì nó dễ chuyển đổi hơn, so với câu trả lời được chấp nhận.
matthiash

Tôi thích giải pháp này. Tôi đã lưu trong một mô-đun bên ngoài và thêm vào nhập khẩu.
Adam

3
Điều này không còn hoạt động với phòng thí nghiệm jupyter (mặc dù nó sẽ rất tuyệt nếu nó sẽ :)
Ajasja

1
Nó đã làm việc ! câu trả lời được chấp nhận đã không giúp tôi. Cảm ơn bạn @matthiash
Gonzalo Garcia

4

Câu trả lời được chấp nhận không hoạt động trong Jupyter (ít nhất là khi sử dụng một số thư viện).

Các giải pháp Javascript ở đây chỉ ẩn các cảnh báo đã hiển thị nhưng không cảnh báo sẽ được hiển thị trong tương lai.

Để ẩn / bỏ ẩn các cảnh báo trong Jupyter và JupyterLab, tôi đã viết đoạn script sau đây về cơ bản để bật css để ẩn / bỏ ẩn các cảnh báo.

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

Tôi nhận được lỗi "Lỗi Javescript: $ không được xác định"
Ben

@Ben bạn đang sử dụng jupyter trong trình duyệt? Notebook trong VSCode không tải $ (jQuery)
robert

Có, tôi làm (Google Chrome)
Ben

Hoạt động như một lá bùa! Cảm ơn bạn!
Douglas Daly

Nó cũng không làm việc cho tôi. Tôi đang gặp lỗi tương tự như Ben (Tôi đang sử dụng JupyterLab).
Tobias Bergkvist

2

Đối với phòng thí nghiệm jupyter, nó sẽ hoạt động (@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>.''')

2

Điều này hoạt động mọi lúc -

import warnings
warnings.filterwarnings('ignore')
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.