NSExpression 捕获无效参数

Posted

技术标签:

【中文标题】NSExpression 捕获无效参数【英文标题】:NSExpression catch invalid arguments 【发布时间】:2013-08-24 17:35:35 【问题描述】:

我正在使用 NSExpression 来评估一个数学字符串,它工作得很好。但是,当输入字符串无效时,我想有一种方法来捕获错误,例如“3++2”。有没有办法做到这一点,而不是应用程序因“NSInvalidArgumentException”而终止。对不起,我对objective-c还很陌生。我现在使用的代码是:

NSExpression *exp = [NSExpression expressionWithFormat: string];
NSNumber *result = [exp expressionValueWithObject:nil context:nil];
answer = [result stringValue];

【问题讨论】:

请参阅***.com/questions/17287076/… 以获得答案。 "3++2" 实际上是有效的;它的意思是“3 + +2”,而不是“3 + -2” 【参考方案1】:

我认为 NSExpression 不是适合这里工作的工具。该类是 Cocoa 谓词系统的一部分,旨在仅接受格式良好的输入。

我建议您寻找合适的数学解析器。我相信GCMathParser 是一个不错的选择。还有DDMathParser。

如果你坚持使用 NSExpression,你可以像这样捕获异常:

@try 
  // the code that potentially raises an NSInvalidArgumentException
 @catch (NSException *exception) 
  if ([[exception name] isEqualToString:NSInvalidArgumentException]) 
    // your error handling
  

但请注意,这是一种不好的做法。 Objective-C 中的异常应该只用于捕获意外的运行时错误。你的例子不符合条件。

【讨论】:

有什么方法可以使用 try catch 块绕过它? @user2303367 DDMathParser 不会抛出异常,但它也会说 3++2 是一个有效的表达式(计算结果为 5)。

以上是关于NSExpression 捕获无效参数的主要内容,如果未能解决你的问题,请参考以下文章

使用 NSExpression 时捕获 NSInvalidArgumentException 的正确方法 [重复]

如何阻止 NSExpression 舍入

NSExpression 使用 sqrt: 函数导致 NSInvalidArgumentException

R 无法尝试捕获多个错误

如果路由参数无效,则在 Ktor 位置捕获异常

由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“无效参数不满足:indexPath!= nil”