在sbcl中我可以像打开不存在的文件一样处理错误:
(require "SB-POSIX")
(let* (fd)
(handler-case
(setf fd (sb-posix:open "w" sb-posix:o-rdonly))
(sb-posix:syscall-error (c)
(princ "error ")
(princ (sb-posix:syscall-errno c))
(princ " during ")
(princ (sb-posix:syscall-name c))
(terpri))))
error 2 during OPEN-WITHOUT-MODE
如果我没有发现错误,结果的上半部分如下所示:
(require "SB-POSIX")
(let* (fd)
(setf fd (sb-posix:open "w" sb-posix:o-rdonly)))
Unhandled SB-POSIX:SYSCALL-ERROR:
Error in SB-POSIX::OPEN-WITHOUT-MODE: No such file or directory (2)
Backtrace for: #<SB-THREAD:THREAD "main thread" RUNNING {1001976AB3}>
看到&#34;没有这样的文件或目录&#34;在那里?有没有办法让我的代码可以访问该字符串,所以我的错误处理程序可以说一些不那么愚蠢的事情&#34;错误2&#34;?
答案 0 :(得分:4)
条件的report function使用错误号调用SB-INT:STRERROR
来获取字符串。反过来,这只是获取错误代码描述的平台特定方式的simple wrapper。
如果你正在使用Emacs / Slime并且有可用的SBCL源代码,你可以使用M-.
跳转到函数/类/等的定义。这对于了解内部是如何工作非常有用。