Tôi cần chuyển đổi cảnh báo thành lỗi để có thể xử lý nó ở phía trên (cảnh báo bị nuốt ở đâu đó ở giữa, mà tôi không kiểm soát được; . Để làm điều này, tôi đang làm như sau:`withCallingHandlers` bên trong` tryCatch` tạo lỗi không thể sửa lỗi
warning_to_error = function (expr)
withCallingHandlers(expr, warning = stop)
này hoạt động tuyệt vời:
> warning_to_error(warning('foobar'))
Error in withCallingHandlers(expr, warning = stop) : foobar
Thật không may, điều này làm cho các lỗi hoàn toàn uncatchable:
> try(warning_to_error(warning('foobar')))
Error in withCallingHandlers(expr, warning = stop) : foobar
In my real situation, có là một số lớp giữa số warning_to_error
và try
của chúng tôi (bao gồm cả logic mà muffl es cảnh báo). Làm thế nào tôi có thể làm cho lỗi được nâng lên bởi trình xử lý cuộc gọi của tôi có thể bắt được? Rất tiếc, tôi không thể sử dụng tính năng khởi động lại như được mô tả in another Stack Overflow question vì stop
không xác định khởi động lại và tôi lại không kiểm soát được mã đang bắt đầu.
Cảm ơn, điều này làm cho hoàn hảo giác quan. Tôi thực sự cố gắng làm điều đó (= in/trả lại điều kiện để kiểm tra nó) nhưng những nỗ lực của tôi thất bại vì nó đơn giản không xảy ra với tôi rằng lớp học sẽ là bất cứ thứ gì khác ngoài 'lỗi'. Duh. –
Nó sẽ còn lớn hơn nếu tôi bằng cách nào đó có thể giả mạo thông tin ngăn xếp cuộc gọi. Rất tiếc, tôi không thể đạt được điều này ngay cả khi sử dụng 'eval', được thực hiện trong' parent.frame() 'của' warning_to_error': theo dõi stack luôn kết thúc bằng 'eval'. Tôi đoán điều này là không thể? –
Tạo một đối tượng điều kiện lỗi và lưu trữ kết quả 'sys.calls' trong nó trước khi chuyển nó tới' stop'. –