这篇根据两个 H 版报错处理示例整理。一个重点是 #WarnContinuableException,另一个重点是用 OnError() 接住运行时错误,把错误保存到日志文件。前者是 H 版里的提示开关,后者才是日常脚本更常用的兜底处理。
不要只靠关闭提示
#WarnContinuableException Off 可以让某些可继续异常不再弹出 H 版警告,但它不是“修复错误”。如果脚本里有变量名错误、调用不存在函数、文件不存在、窗口权限不够,仍然应该用明确的异常处理和日志记录去排查。
#Requires AutoHotkey v1.1
#NoEnv
#WarnContinuableException Off
SetWorkingDir, %A_ScriptDir%
OnError("LogError")
F1::
; 测试:故意制造一个错误,观察 ErrorLog.txt
throw Exception("测试错误:检查日志写入")
Return
Esc::ExitApp
LogError(exception) {
logFile := A_ScriptDir "\ErrorLog.txt"
text := "----- " A_Now " -----" Chr(10)
. "Line: " exception.Line Chr(10)
. "Message: " exception.Message Chr(10)
. "What: " exception.What Chr(10)
. "Extra: " exception.Extra Chr(10)
. "File: " exception.File Chr(10) Chr(10)
FileAppend, %text%, %logFile%, UTF-8
MsgBox, 0x40010, 程序运行时出错, % "错误已写入:" logFile
ExitApp
}
Try/Catch 处理局部错误
OnError() 适合做兜底,但它不应该替代局部判断。像运行外部程序、读取配置文件、连接 COM 对象这种明确可能失败的动作,建议在现场用 Try/Catch 处理。
Try Run, % A_ScriptDir "\not-exist.exe"
Catch e {
MsgBox, % "运行程序失败:" e.Message
; 这里可以改成提示用户重新选择路径,或者写入普通日志
}
日志里要记录什么
exception.Line:出错行号,排查最快。exception.Message:错误消息。exception.What:正在执行的命令或函数。exception.Extra:额外信息,有时为空。exception.File:出错脚本文件路径。
实战建议
- 日志路径优先用
A_ScriptDir或A_Temp,不要写死个人桌面路径。 - 调试阶段可以弹
MsgBox,正式工具更适合静默写日志,再给用户一个简短提示。 #ErrorStdOut对控制台/外部捕获有用,但桌面脚本主要还是靠OnError()和自己的日志函数。- 不要为了“看起来不报错”而关掉所有提示。能定位的错误,最好让日志足够详细。
声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。

评论(0)