判断球拍程序是否在沙箱中
Determin if a racket program is in a sandbox
是否可以确定 Racket 程序是否正在 运行 沙箱中?
我问的原因是因为我有一个创建文件的 Racket 宏。并且 DrRacket 后台扩展器会阻止创建文件(应该如此)。但是,这样做会导致 window 底部出现错误,提示无法创建文件。
所以,我想确定我是否在沙箱中,如果是,请不要创建文件,并请完成宏。
一般来说,您无法确定自己是否处于沙盒中。但是,您确实有机会捕获在尝试执行受限操作时抛出的错误。但是,要注意的是您不知道将抛出什么类型的错误。因此,您可以做的一件事就是抓住所有这些。使用 with-handlers
to catch the error and exn:fail?
捕获所有错误。
(with-handlers ([exn:fail?
(lambda (x) (displayln "failing cleanly"))])
(make-temporary-file))
这里要小心,这里可能会出现与沙箱无关的错误。例如,您可能会因为无法创建文件而收到错误消息:
(with-handlers ([exn:fail:filesystem?
(lambda (x) (displayln "Coudln't open file"))]
[exn:fail?
(lambda (x) (displayln "failing gracefully"))])
(make-temporary-file))
是否可以确定 Racket 程序是否正在 运行 沙箱中?
我问的原因是因为我有一个创建文件的 Racket 宏。并且 DrRacket 后台扩展器会阻止创建文件(应该如此)。但是,这样做会导致 window 底部出现错误,提示无法创建文件。
所以,我想确定我是否在沙箱中,如果是,请不要创建文件,并请完成宏。
一般来说,您无法确定自己是否处于沙盒中。但是,您确实有机会捕获在尝试执行受限操作时抛出的错误。但是,要注意的是您不知道将抛出什么类型的错误。因此,您可以做的一件事就是抓住所有这些。使用 with-handlers
to catch the error and exn:fail?
捕获所有错误。
(with-handlers ([exn:fail?
(lambda (x) (displayln "failing cleanly"))])
(make-temporary-file))
这里要小心,这里可能会出现与沙箱无关的错误。例如,您可能会因为无法创建文件而收到错误消息:
(with-handlers ([exn:fail:filesystem?
(lambda (x) (displayln "Coudln't open file"))]
[exn:fail?
(lambda (x) (displayln "failing gracefully"))])
(make-temporary-file))