无效的输入异常处理-SmallTalk

无效的输入异常处理-SmallTalk,smalltalk,gnu-smalltalk,Smalltalk,Gnu Smalltalk,让名为“sum”的smalltalk消息返回数组中元素的总和 例:#(12345)总和-->15 当输入为#(12'a'35)和时。执行终止并显示一个大的异常框。 相反,我们如何通过显示一条消息来优雅地退出执行呢。我不想显示大的异常窗口 sum |sum| sum := 0 self do: [:a | sum := sum + a] ^sum 我试图用下面的方法处理异常。但是,我注意到,如果输入无效,执行不会终止 sum |sum| sum :

让名为“sum”的smalltalk消息返回数组中元素的总和

例:#(12345)总和-->15

当输入为#(12'a'35)和时。执行终止并显示一个大的异常框。 相反,我们如何通过显示一条消息来优雅地退出执行呢。我不想显示大的异常窗口

sum
    |sum|
    sum := 0
    self do: [:a | sum := sum + a]
    ^sum
我试图用下面的方法处理异常。但是,我注意到,如果输入无效,执行不会终止

sum
    |sum|
    sum := 0
    self do: [:a | 
        (a isInteger) ifFalse:[
            ^[Error signal] on: Exception
            do: [:ex | Transcript show: 'Entered values are non-numeric. Hence comparison is not possible.']
        ]
        sum := sum + a
    ]
    ^sum
如果将下面的代码放在工作区中,我希望执行在第2行终止。然而,第3行也将被执行。 |临时工| 温度:=#(1 2 3'作为4 5)总和。
temp:=temp*5。

更改
sum
方法忽略输入
数组中的错误类型是没有意义的。此外,通过用UI消息替换它,您完全失去了对什么样的输入是可接受的控制。而是在您使用的地方处理这些异常情况
sum

[ ^ self readInput sum ] 
    on: Error do: [ :error| Transcript show: 'Invalid input provided for sum' ].

更改
sum
方法以忽略输入
数组中的错误类型是没有意义的。此外,通过用UI消息替换它,您完全失去了对什么样的输入是可接受的控制。而是在您使用的地方处理这些异常情况
sum

[ ^ self readInput sum ] 
    on: Error do: [ :error| Transcript show: 'Invalid input provided for sum' ].