如何在Q#中引发异常?

ani*_*ion 5 exception q#

我尝试用Q#编写算法。在某些情况下,该算法无法计算出成功的结果,因为用户传递了一些错误的参数。在这种情况下,我想引发异常,现在我想知道:是否可以在Q#中引发和捕获异常?

如果是,我该怎么做?Q#中异常处理的正确方法是什么?

如果没有:为什么?有什么解决方法吗?

Chr*_*ade 3

catch子句在通用语言中特别有用的许多情况看起来有点像处理 I/O 错误,因为它们很难通过普通的流控制来预测和处理。相比之下,Q# 程序的执行目的是可预测的,以便函子喜欢AdjointControlled可以生成适当的程序转换作为更大的量子算法的一部分。

\n\n

也就是说,正如您所指出的,有时人们无法明智地从某种情况出发。因此,Q# 提供了一个与语句fail类似的语句throw(但采用String异常对象而不是异常对象),但不提供与try\xe2\x80\x93catch块类似的内容。该fail语句旨在向 C# 主机程序传达 Q# 程序无法正常执行的信息,并且对于用户传递错误实例等情况很有用。例如,Facts.qs标准库中的整个文件都使用它来实现经典断言函数,例如EqualityWithinToleranceFact

\n\n
function EqualityWithinToleranceFact(actual : Double, expected : Double, tolerance : Double) : Unit {\n    let delta = actual - expected;\n    if (delta > tolerance or delta < -tolerance) {\n        fail $"Fact was false. Expected: \'{expected}\'. Actual: \'{actual}\'";\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n