我正在使用visitor方法来评估解析后的代码。
对于函数调用,我想通过让return语句规则的visitor方法抛出自定义异常ReturnException
来处理return语句。
这样,在函数调用的visitor方法中,它可以捕获return语句异常并返回我保存在异常对象中的返回值。
但是,将try catch放入从BaseVisitor类覆盖的VisitReturnStatement函数中时,会出现错误:
try {
throw new ReturnStatementException("Return statement", retValue);
}
catch(ReturnStatementException e) {
System.out.println("Return statement exception caught");
throw e;
}
错误:error: unreported exception ReturnStatementException; must be caught or declared to be thrown throw e;
我认为这是因为我没有在方法中声明的异常,例如:
@Override
public Value visitReturnStatement (CalculatorParser.ReturnStatementContext ctx) throws Exception {...}
但是,如果我添加throws Exception
,则会收到错误消息Exception Exception is not compatible with throws clause in CalculatorBaseVisitor<Value>
答案 0 :(得分:0)
您不能从visitor方法中引发检查的异常,因为visitor接口没有声明任何引发的异常。唯一的选择是通过扩展Value
来更改要取消检查的异常,将异常包装在pandas
中或重新组织代码以不使用异常。