Exception 如何在Q#中抛出异常?

Exception 如何在Q#中抛出异常?,exception,q#,Exception,Q#,我试着用Q#写一个算法。在某些情况下,算法无法成功计算结果,因为用户传递了一些错误的参数。在这种情况下,我想抛出一个异常,现在我想知道:在Q#中是否可以抛出并捕获异常 如果是:我该如何做?Q#中异常处理的正确方式是什么 如果没有:为什么?有什么解决办法吗?许多情况下,catch子句在通用语言中特别有用,看起来有点像处理I/O错误,因为它们很难通过普通的流控制进行预测和处理。相比之下,Q#程序的执行是可预测的,因此像伴随和受控这样的函子可以生成程序的适当转换,作为更大量子算法的一部分 也就是说,正

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

如果是:我该如何做?Q#中异常处理的正确方式是什么


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

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

也就是说,正如你所指出的,有些时候,人们无法从某种条件出发,理智地行事。因此,Q#提供了一个
fail
语句,该语句的操作类似于
throw
语句(但采用
字符串而不是异常对象),但不提供与
try
catch
块类似的操作。
fail
语句用于向C#宿主程序传达Q#程序无法正常运行的信息,在用户通过坏实例等情况下非常有用。例如,在标准库中的整个文件中都使用此函数来实现经典断言函数,例如:

功能均衡带公差事实(实际值:双精度、预期值:双精度、公差:双精度):单位{
设δ=实际-预期;
如果(增量>公差或增量<-公差){
fail$“事实为false。应为:{Expected}。实际为:{Actual}”;
}
}
function EqualityWithinToleranceFact(actual : Double, expected : Double, tolerance : Double) : Unit {
    let delta = actual - expected;
    if (delta > tolerance or delta < -tolerance) {
        fail $"Fact was false. Expected: '{expected}'. Actual: '{actual}'";
    }
}