我有一个函数可以处理用户给定路径的图像。我对 Mathematica 有点陌生,在它的大型文档中找不到太多内容。Import[myFile] 失败时如何抛出异常?我什至可以这样做吗?
非常感谢。
我有一个函数可以处理用户给定路径的图像。我对 Mathematica 有点陌生,在它的大型文档中找不到太多内容。Import[myFile] 失败时如何抛出异常?我什至可以这样做吗?
非常感谢。
一个简单的原型是
Catch[
Check[img = Import["myFile"], Throw[$Failed], Import::nffil];
Print["Processing image"]
]
如果需要,您可以在哪里使用s来制作Catch
和更有针对性。Throw
tag
您可以使用Throw[anyExpression]
orThrow[anyExpression, exceptionTag]
来引发异常,带有任何表达式。然后,您可以使用Catch[your code]
或Catch[yourCode,exceptionPattern]
。Mathematica 中的异常不像 Java 那样是对象,因此您不能直接使用构建异常继承层次结构的技术并使用多个 catch 语句从更具体到更一般地进行捕获。需要异常标记来为异常提供标识,这有点类似于 Java 中的异常类名称。Throw
没有第二个参数将抛出一个未标记的异常,可以被Catch
没有第二个论点。如果你真的想在 Mathematica 中使用异常,我建议不要这样使用,因为你可以很容易地捕捉到你不打算捕捉的东西——就像你通常不会在 Java 中使用 Exception 一样,而是宁愿将它子类化。Mathematica 中没有检查异常,因此所有 Mathematica 异常都可以视为运行时异常。由于 的第二个参数Catch
是一个模式,您可以构建Catch
能够捕获具有不同标记的异常的命令,这在某种程度上模拟了 Java 的异常继承层次结构。语法也不同 - 没有try
- 您只需将Catch
一段代码从您可能期望异常的地方包装起来。请注意,没有第二个参数的 Catch 不会捕获标记的异常,而Catch
使用第二个参数不会捕获未标记的异常。如果你想要两者,你可能需要像 Catch[Catch[code,pattern]] 一样嵌套。没有finally
提供作为内置子句的子句,但是可以使用用户定义的代码来模拟它,因为在 Mathematica 中,也可以使用非标准评估(具有保持属性的函数等)对控制流结构进行编程。您可以在文档、SO 帖子和 MathGroup 上查找使用案例Catch
和在文档中,您会发现很多很好的示例。Throw
高温高压