是否可以使用“try”检索保护语句中的异常?

Posted

技术标签:

【中文标题】是否可以使用“try”检索保护语句中的异常?【英文标题】:Is it possible to retrieve an exception inside a guard-statement with "try?"? 【发布时间】:2016-06-17 00:39:21 【问题描述】:

在swift中,是否可以使用较短的guard let try? 并且如果进入else块则得到发生的异常?

guard let smth = try? myThrowingFunc() else 
    print(error) //can I access the exception here somehow?
    return

let smth: AnyObject?
do 
    smth = try myThrowingFunc()
 catch let error 
    print(error)
    return

【问题讨论】:

我很确定试试?就像?并且只会将 smh 变成一个可选的枚举,您可以在其中根据需要打开/验证它。意思是,我认为它脱离了 do/catch 范式 是的,'guard let smth = ...' 会尝试解包 - 如果它失败,那么它将执行 else 块。因此,如果有可能以某种方式访问​​异常,这个构造可能会很棒...... 但是谢谢,我可以理解它的工作原理并自己回答我的问题! 【参考方案1】:

我在“Swift 编程语言(Swift 2.2 预发行版)”中找到了第 42 页,其中明确说明了以下内容:

另一种处理错误的方法是使用try? 将结果转换为可选项。如果函数抛出错误,特定错误被丢弃,结果为nil。否则,结果是一个可选项,包含函数返回的值。

所以,这宁愿是苹果的功能请求。事实上,这里已经有一些关于这个话题的讨论:

http://thread.gmane.org/gmane.comp.lang.swift.evolution/8266

【讨论】:

我使用这种模式,if let some = try someOptional 经常我不需要担心抓东西。 是的,它与守卫相反。守卫对于提前退出函数非常有用。我已经注册了 swift-evolution 邮件列表,似乎对该功能很感兴趣,因为已经有人有同样的想法:thread.gmane.org/gmane.comp.lang.swift.evolution/8266

以上是关于是否可以使用“try”检索保护语句中的异常?的主要内容,如果未能解决你的问题,请参考以下文章

Java中的异常处理try catch(第八周课堂示例总结)

java中 try-catch语句

解答一下有关JAVA异常类的问题?

/异常语句try,catch.

动手动脑-异常处理

python中的try/except/else/finally语句