Racket实现try-catch块 引入try-catch-match库运行报语法错误
错误原因
你的代码存在两个核心问题,直接触发语法报错:
- 依赖导入错误:你导入的
try-catch-match是独立的第三方异常处理包,和你参考文档对应的try-catch包语法规则完全不兼容。 - 语法不符合
try-catch包的宏定义要求:try关键字后的执行代码块不需要额外用方括号包裹,直接按顺序书写执行表达式即可- 每个
catch匹配分支必须显式声明异常值的绑定变量,格式为catch (<判断谓词> <绑定变量名>) <处理逻辑>。你的代码没有给异常值e做绑定声明,宏展开阶段无法识别未定义的e,直接抛出语法错误。
可运行的正确实现
首先确保本地已安装try-catch包,未安装的话在命令行执行raco pkg install try-catch完成安装,之后使用如下代码即可:
#lang racket (require try-catch) (try ; try块正常执行逻辑 (displayln "body") (raise 'boom) ; 不同类型异常的捕获分支 [catch (string? e) (printf "caught a string: ~v\n" e)] [catch (symbol? e) (printf "'e' (the value of the exception) is: ~v\n" e)])
运行说明
执行上述代码后,会先打印body,之后捕获到抛出的符号类型异常'boom,输出对应提示:
'e' (the value of the exception) is: 'boom'
如果你确实要使用try-catch-match包,需要参考该包自身的语法规则调整写法,不能直接套用try-catch包的模板。
内容的提问来源于stack exchange,提问作者Awshaf Ishtiaque
相关产品推荐
相关产品推荐

