4

関数do-http-requestに無効なホストを引数として渡すときにエラーが発生しないようにするにはどうすればよいですか。
Javaの例外処理メカニズムのようにエラーをキャッチする方法はありますか?

4

1 に答える 1

4

確かに、CLは非常に良いコンディションシステムを持っています。簡単なオプションの1つは、呼び出しをdo-http-requestでラップすることです。これは、ラップされたコードでエラー条件が通知された場合に(および条件を2番目の値として)ignore-errors返します。nilその後、確認することができnilます。

Javaでの例外処理のようなものが必要な場合はhandler-case、適切なエラー句を使用して追加します(AllegroServeはインストールされていませんがsocket-error、間違ったURLを指定すると、その部分を変更するだけです):

(handler-case
    (do-http-request …)
  (socket-error ()
    …))

finally同様の機能が必要な場合は、次を使用してunwind-protectください。

(unwind-protect
     (handler-case
         (do-http-request …)
       (socket-error (condition) ; bind the signalled condition
         …)                      ; code to run when a socket-error was signalled
       (:no-error (value)        ; bind the returned value
         …))                     ; code to run when no condition was signalled
  …)                             ; cleanup code (finally)

さらに凝ったものにすることもできます。たとえばhandler-bind、スタックを巻き戻さずに、スタックのどこかで再起動を呼び出すことにより、条件スタックを上向きに処理するために使用できます。たとえば、do-http-request別のURLで再試行するための再起動が提供された場合、新しいURLで再起動を呼び出して再試行することにより、エラー状態を処理できます。完全を期すためにこれについて言及します。ユースケースではやり過ぎですが、(おそらく高価な)計算を簡単に再開できることは、かなり便利な機能です。

于 2012-07-31T04:07:07.477 に答える