แสดงข้อผิดพลาดและคำเตือนในบล็อกรหัสโหมดองค์กร


11

ฉันต้องการรายงานคำเตือนและข้อผิดพลาดเมื่อประเมินบล็อก Python ในไฟล์ Org

*Org-Babel Error Output*เมื่อการป้องกันรหัสมีข้อผิดพลาดหลามไวยากรณ์องค์กรสงเคราะห์ปรากฏพวกเขาในบัฟเฟอร์แยกต่างหากที่เรียกว่า :results valueมันจะดีที่จะสามารถที่จะส่งคำเตือนของตัวเองมีมากเกินไปขณะที่การรักษาความสามารถในการส่งกลับผลอาร์เรย์ไปยังโหมดองค์กรเป็นตารางการใช้

เพื่อความชัดเจนนี่เป็นตัวอย่างของสิ่งที่ฉันคิดว่าอาจใช้ได้:

#+BEGIN_SRC python 
    import sys
    sys.stderr.write('Warning.\n')
    sys.stderr.flush()
    return [['Table', 'header'], ['table', 'data']]
#+END_SRC

#+RESULTS:
| Table | header |
| table | data   |

แก้ไขเพื่อเพิ่ม: การสนทนานี้ในรายการโหมดองค์กรแนะนำว่าผลลัพธ์ข้อผิดพลาดจะปรากฏเฉพาะเมื่อการประเมินบล็อกรหัสล้มเหลว ดังนั้นจึงดูเหมือนว่าเป็นไปได้ แต่จะยกเลิกการประเมินโดยใช้exit(1)หรือคล้ายกันเท่านั้น


คำตอบของคอนสแตนติทำงานได้อย่างสมบูรณ์แบบสำหรับฉันถ้ามันเป็นวิธีการแก้ปัญหาสำหรับคุณโปรดยอมรับคำตอบถ้ามันไม่ได้อัปเดตคำถามของคุณโปรด
atevm

คำตอบ:


6

ตามที่อธิบายโดย Eric Schulte ในorg-modeรายชื่อผู้รับจดหมาย (ดูลิงก์ในคำถาม) เราสามารถแก้ไขorg-babel-evalเพื่อให้บรรลุสิ่งนี้:

(defvar org-babel-eval-verbose t
  "A non-nil value makes `org-babel-eval' display")

(defun org-babel-eval (cmd body)
  "Run CMD on BODY.
If CMD succeeds then return its results, otherwise display
STDERR with `org-babel-eval-error-notify'."
  (let ((err-buff (get-buffer-create " *Org-Babel Error*")) exit-code)
    (with-current-buffer err-buff (erase-buffer))
    (with-temp-buffer
      (insert body)
      (setq exit-code
            (org-babel--shell-command-on-region
             (point-min) (point-max) cmd err-buff))
      (if (or (not (numberp exit-code)) (> exit-code 0)
              (and org-babel-eval-verbose (> (buffer-size err-buff) 0))) ; new condition
          (progn
            (with-current-buffer err-buff
              (org-babel-eval-error-notify exit-code (buffer-string)))
            nil)
        (buffer-string)))))

ตอนนี้หากorg-babel-eval-verboseตั้งค่าเป็นtเอาท์พุทที่พิมพ์ไปยัง stderr ระหว่างการประเมินบล็อกซอร์สโค้ดปรากฏขึ้นในหน้าต่างแยกต่างหากราวกับว่าการประเมินซอร์สโค้ดล้มเหลว

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