为无效属性设置引发异常的正确方法是什么?

时间:2013-11-15 16:55:08

标签: redhawksdr

我正在编写一个从特定文件类型中读取数据的组件。目前,它有一个filepath的属性 - 我希望这个块在传递无效文件/找不到文件时尽可能地退出。

抛出异常会导致它停止执行,但是在我测试(?)时也会从黑板中删除该块,这让我觉得有更“批准”的方法来执行它。

我目前的解决方案如下:

LOG_ERROR( MyReader_i, "Unable to open file at " + Filepath );
return FINISH;

如果出现问题,是否还有另一种方法可以阻止,这有望阻止所有下游处理?

1 个答案:

答案 0 :(得分:0)

您是否看过基本组件中的数据读取器组件?它还有一个文件路径作为输入。它在onConfigure调用期间处理此问题,如下所示:

def onconfigure_prop_InputFile(self, oldvalue, newvalue):
    self.InputFile = newvalue
    if not os.path.exists(self.InputFile):
        self._log.error("InputFile path provided can not be accessed")

然后通过返回NOOP再次在服务功能中。

def process(self):

    if (self.Play == False):
        return NOOP
    if not (os.path.exists(self.InputFile)):
        return NOOP

然而,这不是处理无效输入的唯一方法。这是一个由开发人员决定的设计决策。

如果您想了解下游其他组件以了解链中其他地方的问题,您可以选择一些选项。您可以使用在bulkio端口实现中可用的End of Stream位向下游组件发送信号,表示没有其他数据。然后,他们可以使用此信息进行清理和关闭。您还可以使用消息传递将消息发送到事件通道,并且可以使订阅此事件通道的任何人知道该消息。再次,这是一个设计决定。