Tôi đến từ nền C# nơi tôi thường nâng cao ngoại lệ với ngoại lệ ban đầu chứa bên trong ngoại lệ gốc. Là một khái niệm tương tự có sẵn trong Ruby? Làm cách nào để phát hiện và tăng ngoại lệ trong khi duy trì ngữ cảnh của ngoại lệ cấp thấp hơn?ruby - tăng ngoại lệ với ngoại lệ
11
A
Trả lời
14
Hãy nhìn vào các thủ thuật từ cuộc nói chuyện Exceptional Ruby bởi Avdi Grimm:
class MyError < StandardError
attr_reader :original
def initialize(msg, original=nil);
super(msg);
@original = original;
end
end
# ...
rescue => error
raise MyError.new("Error B", error)
end
4
Bạn có thể mở rộng StandardError:
class StandardError
attr_accessor :original
end
và khi bạn nâng một ngoại lệ, chỉ cần đặt khách sạn này:
def reraise ex, original
ex.original = original
raise ex
end
rescue StandardError => e
reraise ArgumentError.new('Message'), e
end
Với cách tiếp cận này, bạn sẽ có thể tăng tiêu chuẩn ruby er rors và thiết lập lỗi cha mẹ cho họ, không chỉ lỗi tùy chỉnh của bạn.
5
Ruby 2.1 đã thêm Exception#cause tính năng để giải quyết vấn đề này.
Các vấn đề liên quan
- 1. tăng ngoại lệ
- 2. Tăng ngoại lệ trong Rcpp
- 3. ngoại lệ Weird với delayed_job
- 4. Ngoại lệ Java và Ngoại lệ C++
- 5. Generalized dịch ngoại lệ cho tăng python
- 6. python: phục hồi ngoại lệ từ khối try nếu khối finally tăng ngoại lệ
- 7. Các lớp Lỗi ngoại lệ của Ruby
- 8. Ngoại lệ hoặc Lỗi của Ruby?
- 9. Tăng cường đối với ngoại lệ vòng lặp
- 10. Ruby Enumerator - Tại sao kết thúc với ngoại lệ?
- 11. Có sự khác biệt nào giữa "tăng ngoại lệ()" và "tăng ngoại lệ" không có dấu ngoặc đơn không?
- 12. Ngoại lệ trong các trường hợp ngoại lệ trong C++
- 13. recursive_directory_iterator ném ngoại lệ
- 14. ném mới std :: ngoại lệ vs ném std :: ngoại lệ
- 15. Tuyên truyền C++ ngoại lệ cho Cython - python ngoại lệ
- 16. Ném ngoại lệ trong bộ xử lý ngoại lệ
- 17. Ngoại lệ 'Cố gắng thay đổi thông báo' ngoại lệ
- 18. Delphi Xử lý ngoại lệ vấn đề với nhiều khối xử lý ngoại lệ
- 19. Tùy chọn so với Ngoại lệ trong xử lý ngoại lệ
- 20. Python MySQLdb ngoại lệ
- 21. Ngoại lệ trong WindowProc
- 22. Ngăn chặn ngoại lệ
- 23. Ngoại lệ HandShake SSL
- 24. System.Net.UnsafeNclNativeMethods.OSSOCK.recv ngoại lệ webservice
- 25. Chuỗi ngoại lệ Python
- 26. android httpclient.execute ngoại lệ
- 27. Haskell "ngoại lệ"
- 28. IIS StackOverflow ngoại lệ
- 29. Floating điểm ngoại lệ
- 30. autoFocus ném ngoại lệ
Bạn không phải bao gồm thông điệp làm đối số khi thực hiện siêu (msg). Nếu bạn làm tăng MyError (lỗi), 'một số thông báo' với những thay đổi đó, 'một số thông báo' sẽ được chuyển thành một đối số ngầm định. – daremkd