関数do-http-requestに無効なホストを引数として渡すときにエラーが発生しないようにするにはどうすればよいですか。
Javaの例外処理メカニズムのようにエラーをキャッチする方法はありますか?
1 に答える
確かに、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で再起動を呼び出して再試行することにより、エラー状態を処理できます。完全を期すためにこれについて言及します。ユースケースではやり過ぎですが、(おそらく高価な)計算を簡単に再開できることは、かなり便利な機能です。