2012-05-21 28 views
6

Khi tôi chạy phần sau, giải cứu dường như bị bỏ qua đối với ArgumentError. Thông báo lỗi ArgumentError từ Ruby xuất hiện trên giao diện điều khiển, nhưng thông báo của tôi không có. Tôi đã thử giải cứu bằng TypeError và ZeroDivisionError, và nó đã hoạt động.Ruby bỏ qua việc giải cứu ArgumentError

def divide(a, b) 
    begin 
     a.to_s + ' divided by ' + b.to_s + ' is ' + (a/b).to_s 
    rescue ArgumentError 
     puts 'there must be two arguments' 
    end 
end 

divide(4) 

Trả lời

8

Trường hợp ngoại lệ không được ném bên trong hàm, nhưng tại điểm mà nó được gọi là, vì vậy bạn cần phải nắm bắt nó ở một nơi khác:

def divide(a, b) 
    a.to_s + ' divided by ' + b.to_s + ' is ' + (a/b).to_s 
end 

begin 
    divide(4) 
rescue ArgumentError 
    puts 'there must be two arguments' 
end 

Trong khi làm việc, bắt ArgumentError là rất ý tưởng tồi, vì nó cho biết lỗi trong mã của bạn mà bạn không thể khôi phục được.

+0

Cảm ơn. Tôi đã thay đổi chương trình và bây giờ nó hoạt động như mong đợi. –

+1

@Kao: Trong trường hợp đó, vui lòng xem xét chấp nhận câu trả lời bằng cách nhấp vào nút đánh dấu ở bên cạnh :) –

1

Việc giải cứu sẽ được thực hiện cho phần mã sau: a.to_s + ' divided by ' + b.to_s + ' is ' + (a/b).to_s. Ngoại lệ của bạn được kích hoạt không phải trong phương thức, nhưng vào thời gian gọi, nếu bạn hiểu ý tôi.

+0

Tôi hiểu. Cảm ơn. –

Các vấn đề liên quan