1

私は現在cxml-stpフレームワークを使用して開発していますが、解析中にsimple-errorのサブクラスであるcxml-stp:stp-errorを取得します。供給されます。

エラーメッセージを印刷するにはどうすればよいですか? どちらの API も特定の機能を提供しておらず、単純なFORMAT結果としてオブジェクトが印刷されますが、提供された FORMAT 文字列は使用されません。

例えば

(SB-KERNEL:CASE-FAILURE
 ETYPECASE
 #<CXML-STP:STP-ERROR "text includes characters that cannot be ~
                represented in XML at all: ~S"
   {1007814951}>
 (STRING SIMPLE-STRING))
4

2 に答える 2

3

エスケープせずに条件オブジェクトを単純に記述します。

(write condition :escape nil)
于 2012-06-22T14:00:59.770 に答える
1
(defun try-handle-error (err)
  (handler-case
      (error err)
    (serious-condition (condition)
      (apply #'format
         (nconc (list t)
            (cons (simple-condition-format-control condition)
              (simple-condition-format-arguments condition)))))))

(try-handle-error (make-condition
        'simple-error
        :format-control "say something ~s~&"
        :format-arguments '(42)))

これは一例です。基本的に、format-control と format-arguments は simple-error クラスで宣言されたスロットリーダーです。エラーを処理するときに、そのエラーでそれらを呼び出して、作成中に受け取った値を取得できます。

于 2012-06-22T12:07:32.713 に答える