我如何找出 tcl 命令可能产生的错误?
How do I find out what errors a tcl command can generate?
在tcl try manpage处有如下例子:
try {
set f [open /some/file/name w]
} trap {POSIX EISDIR} {} {
puts "failed to open /some/file/name: it's a directory"
} trap {POSIX ENOENT} {} {
puts "failed to open /some/file/name: it doesn't exist"
}
太好了,它有效,但我怎么会发现 {POSIX ENOENT}
是 open
的可能陷阱模式? open manpage 没有提到它。对于 tcl 中给定的任意命令,我如何找出可能的错误是什么?
try {} trap {}
在有特定错误需要捕获时使用。
对于更一般的陷阱,请使用 try {} on error {}
.
try {
set fh [open myfile.txt w]
} on error {err res} {
puts "Error on open: $res"
}
还有catch命令:
if { [catch {set fh [open myfile.txt w]}] } {
puts "error on open."
}
各种POSIX
错误来自OS,您需要猜测系统调用并查找它们。例如,猜测 open
命令映射到 open()
system call 并不是一个很好的范围,因此它在那里记录了错误。有些对于 Tcl 来说是极不可能的(例如,那些与传递错误缓冲区有关的 POSIX EFAULT
),但我们不保证 OS 不会 return 它们,因为OS 根本没有给我们这样的保证。
我们应该从涉及操作系统的命令中记录最有可能的命令,但在较高级别:
POSIX
class来自OS(例如,读取一个不存在的文件是POSIX ENOENT
),
-
TCL
class 那些来自 Tcl 自己的内部代码(例如,将错误数量的参数传递给 open
,这给你 TCL WRONGARGS
,或者要求太大的内存分配,如果 Tcl 设法恢复,这会给你TCL MEMORY
。
我们不太可能详尽记录所有可能性(尤其是在 TCL
class 中),因为许多可能性不太可能是正确的代码。
在tcl try manpage处有如下例子:
try {
set f [open /some/file/name w]
} trap {POSIX EISDIR} {} {
puts "failed to open /some/file/name: it's a directory"
} trap {POSIX ENOENT} {} {
puts "failed to open /some/file/name: it doesn't exist"
}
太好了,它有效,但我怎么会发现 {POSIX ENOENT}
是 open
的可能陷阱模式? open manpage 没有提到它。对于 tcl 中给定的任意命令,我如何找出可能的错误是什么?
try {} trap {}
在有特定错误需要捕获时使用。
对于更一般的陷阱,请使用 try {} on error {}
.
try {
set fh [open myfile.txt w]
} on error {err res} {
puts "Error on open: $res"
}
还有catch命令:
if { [catch {set fh [open myfile.txt w]}] } {
puts "error on open."
}
各种POSIX
错误来自OS,您需要猜测系统调用并查找它们。例如,猜测 open
命令映射到 open()
system call 并不是一个很好的范围,因此它在那里记录了错误。有些对于 Tcl 来说是极不可能的(例如,那些与传递错误缓冲区有关的 POSIX EFAULT
),但我们不保证 OS 不会 return 它们,因为OS 根本没有给我们这样的保证。
我们应该从涉及操作系统的命令中记录最有可能的命令,但在较高级别:
POSIX
class来自OS(例如,读取一个不存在的文件是POSIX ENOENT
),-
TCL
class 那些来自 Tcl 自己的内部代码(例如,将错误数量的参数传递给open
,这给你TCL WRONGARGS
,或者要求太大的内存分配,如果 Tcl 设法恢复,这会给你TCL MEMORY
。
我们不太可能详尽记录所有可能性(尤其是在 TCL
class 中),因为许多可能性不太可能是正确的代码。