【问题标题】:how to print error in catch如何在catch中打印错误
【发布时间】:2017-03-04 04:22:14
【问题描述】:
catch let error as LocksmithError{
print(error)// it would print the case of the error.
}

如果我这样做了

catch LocksmithError.Duplicate{

}

catch{
print (LocksmithError) // Obviously I would just print LocksmithError, it won't print the case
print (LocksmithError.rawValue) // prints nothing
}

我的问题是:使用第二种方法我可以实际检索到错误的值/情况吗?或者,如果我没有在入口点(即捕获)获得正确的价值,那么我就错过了这样做的机会!

【问题讨论】:

  • 你可以在无条件的catchprint(error)
  • @Hamish 对不起,我不明白你的意思?
  • 你可以写catch { print(error) }...
  • @Hamish 但如果是这里的情况 Duplicate 并且我 已经 抓住了它,那么我将无法打印它
  • 是的,这就是捕捉的工作原理。我误解了你的问题吗?我以为您只是在问如何在最后的 catch 块中检索错误。所以你的问题实际上是如何打印给定的错误,无论它是否已经被捕获?如果是这样,请edit你的帖子说清楚:)

标签: swift error-handling enums try-catch


【解决方案1】:

catch 块是排他性案例,按顺序评估。当匹配成功时,我们停止

所以,让我们想想这个结构:

catch LocksmithError.Duplicate {
    // 1
    print("duplicate")
}
catch {
    // 2
    print(error)
}

如果我们在 1,那么范围内就是LocksmithError.Duplicate

如果我们在 2,那么范围内的就是每一种 other 类型的被捕获的错误。您无法在此处获取LocksmithError.Duplicate,因为假设它会在1中被捕获,而我们不会 > 这里。

现在,会这样做:

catch let err as LocksmithError {
    // 1
    print(err)
}
catch {
    // 2
    print(error)
}

这可能就是你所追求的;它为我们提供了一个值err,它将错误带入 1 中的花括号中。 (自动的error 值只存在于最后的全能catch 块。)

【讨论】:

  • 我好像没有解释清楚。我希望能够在 1 和 2 中打印(错误)。在 1 中它会在 2 中打印“重复”它会打印任何错误
  • 然后在 1 中只写 print("duplicate")。你知道你是对的,因为如果不是 Locksmith.Duplicate 我们就不会在这里。
  • 我已经重写了我的答案以证明我的意思。
  • 像往常一样,我推荐阅读我关于这个主题的书:apeth.com/swiftBook/ch05.html#_throwing_and_catching_errors
  • 你想多了。 err 只是我编的一个名字。我可以称它为wibblyWobblyWoo
猜你喜欢
  • 1970-01-01
  • 2012-11-22
  • 2019-12-22
  • 1970-01-01
  • 2017-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多