Error handling APL中的错误处理

Error handling APL中的错误处理,error-handling,apl,dyalog,Error Handling,Apl,Dyalog,我目前正在为一个类编写APL程序,遇到了一个错误处理问题 在我创建的函数中,我想检查输入是否为整数。如果不是,我希望返回一条错误消息,并且不运行函数的其余部分。到目前为止,我比较看它是否等于地板本身。如果没有,我不希望函数运行并希望它停止。如果我把4.2放进去并给出一条错误消息,它会工作,但如果我把'A'放进去或'ABCDEF'仅仅给出一个正常错误,它就不工作。我试图创建一个try-catch语句,但当它到达我的函数中的:try时,它给了我一个错误 这不是我想要的。如果输入是字符或字符串,如何使

我目前正在为一个类编写APL程序,遇到了一个错误处理问题

在我创建的函数中,我想检查输入是否为整数。如果不是,我希望返回一条错误消息,并且不运行函数的其余部分。到目前为止,我比较看它是否等于地板本身。如果没有,我不希望函数运行并希望它停止。如果我把
4.2
放进去并给出一条错误消息,它会工作,但如果我把
'A'
放进去或
'ABCDEF'
仅仅给出一个正常错误,它就不工作。我试图创建一个try-catch语句,但当它到达我的函数中的
:try
时,它给了我一个错误

这不是我想要的。如果输入是字符或字符串,如何使函数以错误消息结束而不是继续?我知道我可以将整个代码放在if块中,但这似乎真的没有必要

我的纯文本代码:

Q测试仪;错误
:如果Q≢⌊Q
“可能”
:其他
“不可能”
:EndIf
“再说一遍,有可能”
作为截图:


如果要提前明确退出以避免将整个代码包含在
块中:如果
块中,可以执行以下操作:

 r←TESTER Q
 :If 0≢⊃0⍴⊂Q ⍝ Q not a simple scalar number
 :OrIf Q≢⌊Q  ⍝ Q not an integer
     r←'Not Possible'
     →0
 :EndIf
 r←'Possible'
这通过使用APL的原型来实现:

⊂Q
 确保将
Q
作为一个整体处理。
0⍴ 创建该“类型”的空列表。
 强制输出一个原型元素,这与
Q
类似,但所有字符都转换为空格,所有数字都转换为零。现在,如果
Q
是一个简单的标量数,那么原型是
0
,所以我们测试它

但是,您的函数通过抛出一个实际错误而不是返回或打印结果(隐式地需要理解为错误)来拒绝无效参数更合适,这样调用您的函数就可以捕获错误并采取适当的操作。详情如下:

 r←TESTER Q
 :If 0≢⊃0⍴⊂Q ⍝ Q not a simple scalar number
 :OrIf Q≢⌊Q  ⍝ Q not an integer
     'Not Possible'⎕SIGNAL 11
 :EndIf
 r←'Possible'

⎕SIGNAL
通过自定义消息选择性地抛出错误(左参数),右参数是来自的错误号。错误号11是域错误,这是本例中的适当错误


我知道您尝试使用了
:Try
,但出现了一个错误。根据您的标签和屏幕截图,我可以看出您使用的是Dyalog APL,语法如下:

 :Trap 4 5 6 10 11 16
     code to try goes here
 :CaseList 4 5
     handling of rank and length errors go here
 :Case 6
     handling of value errors goes here
 :Else
     all other trapped errors are handled here
 :EndTrap
 untrapped errors will throw as usual
同样,使用的错误号是上述链表中的错误号。(
:Try
是APLX中使用的另一种错误捕获系统。)