Computer >> Máy Tính >  >> Lập trình >> Ruby

Làm việc với các ngoại lệ trong Pry

Nếu bạn giống tôi, bạn sử dụng bảng điều khiển Rails rất nhiều. Và bây giờ tôi nghĩ rằng mọi người đều đồng ý rằng Pry là điều tốt nhất xảy ra với bảng điều khiển Rails kể từ ... tốt, từ trước đến nay.

Tích hợp sẵn để tìm hiểu là một vài tính năng thực sự thú vị giúp làm việc với các ngoại lệ dễ dàng hơn nhiều so với IRB cũ thông thường.

Xem toàn bộ backtrace

Khi các trường hợp ngoại lệ xảy ra trong Pry (hoặc IRB cho vấn đề đó), bạn sẽ được cung cấp một phiên bản rút gọn của backtrace. Điều này thường đủ tốt, nhưng không phải lúc nào cũng vậy.

Trong sơ đồ, bạn có thể xem toàn bộ dấu vết của ngoại lệ gần đây nhất bằng cách sử dụng lệnh wtf -v. Nếu bạn bỏ cờ -v, bạn sẽ nhận được dấu lùi viết tắt.

Làm việc với các ngoại lệ trong Pry Sử dụng lệnh wtf để truy cập backtrace gần đây nhất

Truy cập dữ liệu ngoại lệ

Các trường hợp ngoại lệ thường có dữ liệu thú vị gắn liền với chúng. Khi một ngoại lệ xảy ra trong IRB, bạn chỉ có thể thấy tên lớp và thông báo lỗi. Nhưng với Pry, bạn có quyền truy cập vào đối tượng ngoại lệ thực tế. Điều đó có nghĩa là bạn có thể tiếp cận và lấy ra bất kỳ dữ liệu nào bạn cần.

Để có được ngoại lệ được nêu ra gần đây nhất, hãy sử dụng _ex_ Biến đổi. Không giống như $! tích hợp sẵn của Ruby , bạn không cần phải ở bên trong khối cứu hộ để sử dụng nó.

Làm việc với các ngoại lệ trong Pry Sử dụng ex biến cục bộ để truy cập ngoại lệ gần đây nhất

Tùy chỉnh cách hiển thị các ngoại lệ

Giả sử bạn luôn muốn xem toàn bộ hậu quả khi bạn đang tìm hiểu? Bạn có thể làm điều đó bằng cách ghi đè trình xử lý ngoại lệ mặc định.

Chỉ cần mở ~ / .pryrc và làm cho nó trông như thế này:

# This code was mostly taken from the default exception handler. 
# You can see it here: https://github.com/pry/pry/blob/master/lib/pry.rb

Pry.config.exception_handler = proc do |output, exception, _|
  if UserError === exception && SyntaxError === exception
      output.puts "SyntaxError: #{exception.message.sub(/.*syntax error, */m, '')}"
  else
    output.puts "#{exception.class}: #{exception.message}"
    output.puts "from #{exception.backtrace}"   
  end
end

Bạn thậm chí có thể làm những việc điên rồ như đăng nhập tất cả các ngoại lệ Pry của bạn vào Honeybadger. :)