Ruby
 Computer >> コンピューター >  >> プログラミング >> Ruby

Pryでの例外の処理

あなたが私のようなら、あなたはRailsコンソールをよく使います。そして今では、PryがRailsコンソールに起こる最良のことであることに誰もが同意していると思います...まあ、これまで。

組み込みのこじ開けは、昔ながらのIRBに比べて、例外を除いて作業をはるかに簡単にするいくつかの非常に優れた機能です。

完全なバックトレースを表示

Pry(またはそのことについてはIRB)で例外が発生すると、バックトレースの短縮バージョンが表示されます。通常はこれで十分ですが、常にそうとは限りません。

pryでは、wtf -vコマンドを使用して、最新の例外の完全なバックトレースを確認できます。 -vフラグを省略した場合、バックトレースが省略されます。

Pryでの例外の処理 wtfコマンドを使用して、最新のバックトレースにアクセスします

アクセス例外データ

例外には、興味深いデータが添付されていることがよくあります。 IRBで例外が発生すると、クラス名とエラーメッセージのみが表示されます。ただし、Pryを使用すると、実際の例外オブジェクトにアクセスできます。つまり、必要なデータにアクセスして引き出すことができます。

最近発生した例外を取得するには、_ex_を使用します 変数。 Rubyの組み込みの$!とは異なります 変数、それを使用するためにレスキューブロックの中にいる必要はありません。

Pryでの例外の処理 exを使用します 最新の例外にアクセスするためのローカル変数

例外の表示方法をカスタマイズする

詮索好きなときに常に完全なバックトレースを見たいとしましょう。これを行うには、デフォルトの例外ハンドラをオーバーライドします。

〜/ .pryrcを開いて、次のようにします。

# 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

すべてのPry例外をHoneybadgerに記録するなど、クレイジーなことを行うこともできます。 :)


  1. C++で例外はどのように機能しますか

    C ++では、例外処理はランタイムエラーを処理するプロセスです。例外は、C++で実行時にスローされるイベントです。すべての例外は、std::exceptionクラスから派生します。処理可能なランタイムエラーです。例外を処理しない場合は、例外メッセージを出力してプログラムを終了します。 例外は、C ++標準では、プログラム内で使用できるクラスとして定義されています。親子クラス階層の配置を以下に示します- C++の一般的な例外クラスは-です。 Sr.No。 例外と説明 1 std ::exception これは、すべての標準C++例外の例外および親クラスです。

  2. Rubyのカスタム例外

    Rubyで独自の例外を作成するのは簡単です。次の手順に従ってください: 1。新しいクラスを作成する 例外は、Rubyの他のすべてと同じように、クラスです。新しい種類の例外を作成するには、StandardErrorまたはその子の1つから継承するクラスを作成するだけです。 class MyError < StandardError end raise MyError 慣例により、新しい例外のクラス名は「エラー」で終わります。カスタム例外をモジュール内に配置することもお勧めします。つまり、最終的なエラークラスは次のようになります:ActiveRecord::RecordNotFound