JSO*_* K. 6 error-handling apl dyalog
\n我目前正在为一个类开发 APL 程序,并且遇到了错误处理问题。
\n\n在我制作的函数中,我想检查输入是否是整数。如果不是,我想返回错误消息并且不运行函数的其余部分。到目前为止,我比较它是否等于它本身的下限。如果没有,我不希望该函数运行并希望它停止。如果我输入并给出错误消息,它会起作用,但如果我输入类似or 的内容并仅给出正常错误,则它4.2不起作用。我尝试制作一个 try catch 语句,但是当它进入我的函数时它给了我一个错误。\'A\'\'ABCDEF\':Try
这不是我想要的。如果输入是字符或字符串,如何使函数以错误消息结束而不是继续?我知道我可以将整个代码放在 if 块中,但这似乎确实没有必要。
\n\n我的纯文本代码:
\n\n TESTER Q;error\n :If Q\xe2\x89\xa2\xe2\x8c\x8aQ\n \'Possible\'\n :Else\n \'Not Possible\'\n :EndIf\n \'Again, Possible\'\nRun Code Online (Sandbox Code Playgroud)\n\n作为屏幕截图:
\n\n
如果您想明确地提前退出以避免将整个代码包含在一个:If块中,您可以执行以下操作:
r\xe2\x86\x90TESTER Q\n :If 0\xe2\x89\xa2\xe2\x8a\x830\xe2\x8d\xb4\xe2\x8a\x82Q \xe2\x8d\x9d Q not a simple scalar number\n :OrIf Q\xe2\x89\xa2\xe2\x8c\x8aQ \xe2\x8d\x9d Q not an integer\n r\xe2\x86\x90\'Not Possible\'\n \xe2\x86\x920\n :EndIf\n r\xe2\x86\x90\'Possible\'\nRun Code Online (Sandbox Code Playgroud)\n\n这是通过使用 APL 的原型来实现的:
\n\n\xe2\x8a\x82QQ\xe2\x80\x83 确保作为一个整体进行处理。
\n 0\xe2\x8d\xb4\xe2\x80\x83 创建该“类型”的空列表。
\n \xe2\x8a\x83\xe2\x80\x83 强制输出一个原型元素,这Q与所有字符都转换为空格、所有数字都转换为零类似。现在,如果Q是一个简单的标量数,则原型是0,因此我们对其进行测试。
但是,您的函数更合适的做法是通过抛出真正的错误来拒绝无效参数,而不是返回或打印结果(这隐式需要被理解为错误),以便调用您的函数可以捕获错误并采取适当的行动。如下:
\n\n r\xe2\x86\x90TESTER Q\n :If 0\xe2\x89\xa2\xe2\x8a\x830\xe2\x8d\xb4\xe2\x8a\x82Q \xe2\x8d\x9d Q not a simple scalar number\n :OrIf Q\xe2\x89\xa2\xe2\x8c\x8aQ \xe2\x8d\x9d Q not an integer\n \'Not Possible\'\xe2\x8e\x95SIGNAL 11\n :EndIf\n r\xe2\x86\x90\'Possible\'\nRun Code Online (Sandbox Code Playgroud)\n\n\n\n\xe2\x8e\x95SIGNAL可选地抛出带有自定义消息的错误(左侧参数),右侧参数是此列表中的错误号。错误号 11 是“域错误”,在本例中是合适的错误。
我知道您尝试使用:Try但出现错误。根据您的标签和屏幕截图,我可以看出您正在使用 Dyalog APL,其语法为:
:Trap 4 5 6 10 11 16\n code to try goes here\n :CaseList 4 5\n handling of rank and length errors go here\n :Case 6\n handling of value errors goes here\n :Else\n all other trapped errors are handled here\n :EndTrap\n untrapped errors will throw as usual\nRun Code Online (Sandbox Code Playgroud)\n\n同样,使用的错误号是上面链接列表中的错误号。(:Try是 APLX 中使用的不同错误捕获系统。)
| 归档时间: |
|
| 查看次数: |
487 次 |
| 最近记录: |