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