tcl - 是否可以捕获 glob 的错误输出?
问题描述
假设如果我包含以下glob
命令try/trap/finally
:
proc generateSubmissionFolder {cover_letter_resume submission_path} {
set submission_parent [file dirname $submission_path]
set latest_submission_folder [lindex [lsort [glob -directory $submission_parent -type d *]] end]
set latest_submission_file [lindex [glob -directory $latest_submission_folder *[file extension $cover_letter_resume]] end]
createSubmissionFolder $latest_submission_file $submission_path
}
proc createSubmissionFolder {source destination} {
puts "Creating $destination folder."
file mkdir $destination
puts "Copying $source to $destination"
file copy $source $destination
}
try {
# I gathered user input and stored them in the variables $company_name and $position.
set submission_path [file join $company_name $position $yearmonthday]
if {[file exists [file dirname $submission_path]]} {
generateSubmissionFolder $coverletterresume $submission_path
} else {
createSubmissionFolder $coverletterresume $submission_path
}
} trap {Value Empty} {errormessage} {
puts "$errormessage"
} finally {
puts "$argv0 exiting."
}
如果没有找到文件夹,我想提供一条人类可读的错误消息,但我不确定要捕获什么错误。根据我上一个问题的答案:
Tcl 没有预定义的异常层次结构。
我尝试的唯一解决方法是使用-nocomplain
开关,然后检查是否latest_submission_folder
为空白。
有没有办法捕获一个FileNotFound
或FolderNotFound
错误?
解决方案
对于像您的示例这样的琐碎情况,请使用on error
处理程序,而不是trap
. 或使用catch
代替try
.
示例tclsh
会话:
% try { glob *.bar } on error {what} { puts "Ooops: $what" }
Ooops: no files matched glob pattern "*.bar"
% if {[catch { glob *.bar } result] == 1} { puts "Ooops: $result" }
Ooops: no files matched glob pattern "*.bar"
或者,如果您确实想使用trap
,因为您还想处理来自更复杂代码的一堆其他可能的特定错误,则会glob
引发TCL OPERATION GLOB NOMATCH
失败:
% try { glob *.bar } trap {TCL OPERATION GLOB NOMATCH} {msg} { puts "Ooops: $msg" }
Ooops: no files matched glob pattern "*.bar"
您可以通过以下方式发现trap
用于任何给定命令的特定错误的内容:
% catch { glob *.bar } result errdict
1
% dict get $errdict -errorcode
TCL OPERATION GLOB NOMATCH
推荐阅读
- ruby-on-rails - 通过 Redmine 中的 Rake 任务保存问题自定义字段值
- phpstorm - PhpStorm 查找当前远程文件中的所有实例
- python - 在 /news/create/ CreateNewsView 配置不当,缺少 QuerySet
- vue.js - vue-cli · 下载 repo vuejs-templates/webpack-simple 失败:无法建立隧道套接字,statusCode=403
- php - php -ajax 函数不向控制器发送数据
- ios - 动态 UICollectionView 单元格高度
- image-processing - for 循环中的操作仅适用于 imageJ 中的最后一个文件
- javascript - 当我从 javascript 生成相同的代码时出现填充
- php - Yii2中年份大于月份小于指定年份时如何获取大于选定年份和月份的记录
- php - SOAP 错误 - PHP 中的 VersionMismatch 但 SOAP UI 正常