ซ่อนคำเตือนทั้งหมดใน ipython


300

ฉันต้องสร้าง screencast ของเซสชัน ipython และเพื่อหลีกเลี่ยงผู้ดูที่สับสนฉันต้องการปิดการเตือนทั้งหมดที่warnings.warnโทรออกจากแพ็คเกจที่แตกต่างกัน มีวิธีการกำหนดค่าไฟล์ ipythonrc เพื่อปิดใช้งานคำเตือนดังกล่าวทั้งหมดโดยอัตโนมัติหรือไม่


3
ทราบเมื่อคุณสามารถคุณควรยอมรับคำตอบของคุณแล้วไปตรวจสอบคำถามอื่น ๆ ของคุณและดูว่าพวกเขามีคำตอบที่ยอมรับได้
Dan D.

คำตอบ:


716

ในที่สุดฉันก็คิดออก สถานที่:

import warnings
warnings.filterwarnings('ignore')

~/.ipython/profile_default/startup/disable-warnings.pyภายใน ฉันออกจากคำถามนี้และคำตอบสำหรับบันทึกในกรณีที่คนอื่นเจอปัญหาเดียวกัน

บ่อยครั้งที่มีประโยชน์ในการดูคำเตือนหนึ่งครั้ง สามารถตั้งค่าได้โดย:

warnings.filterwarnings(action='once')

8
ใช้ได้กับคำเตือนสำหรับโน๊ตบุ๊ค IPython Nice fix :)
Keith Hughitt

6
@ FrozenFlame คุณเปลี่ยนกลับเป็น 'ค่าเริ่มต้น' ดู: docs.python.org/2/library/warnings.html
AZhao

36
นอกจากนี้คุณยังสามารถดำเนินการนี้ในสมุดบันทึกเพื่อที่จะปราบปรามเฉพาะคำเตือน (แน่นอน) ในสมุดบันทึกหนึ่งเล่ม
Vasco

มีบางอย่างผิดปกติเกิดขึ้นกับฉันฉันทำงานบนสมุดบันทึก Kaggle และแม้ว่าฉันจะตั้งค่าไว้warnings.filterwarnings('ignore')ที่จุดเริ่มต้นของสคริปต์ของฉันฉันก็จะได้รับคำเตือนต่อไป มันควรจะเกี่ยวข้องกับความจริงที่ว่าฉันใช้ตัวเร่งความเร็ว TPU หรือไม่ TPU มีพฤติกรรมเฉพาะในกรณีนี้ ... ฉันสงสัย ฉันไม่เข้าใจ.
Catalina Chircu

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
แม้จะมี downvote แต่ก็ยังเชื่อว่าเป็นเคล็ดลับที่มีประโยชน์เนื่องจากสามารถสลับได้ง่ายกว่าเมื่อเปรียบเทียบกับคำตอบที่ยอมรับ
matthiash

ฉันรักทางออกนี้ ฉันบันทึกในโมดูลภายนอกและเพิ่มลงในการนำเข้า
อดัม

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 Error: $ ไม่ได้ถูกกำหนด"
Ben

@Ben คุณใช้ jupyter ในเบราว์เซอร์หรือไม่ โน้ตบุ๊กใน VSCode ไม่โหลด $ (jQuery)
robert

ใช่ฉันทำ (Google Chrome)
Ben

ทำงานเหมือนจับใจ! ขอบคุณ!
Douglas Daly

ไม่ได้ผลสำหรับฉันเช่นกัน ฉันได้รับข้อผิดพลาดเดียวกับเบ็น (ฉันใช้ JupyterLab)
Tobias Bergkvist

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>.''')

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.