0

背景

我只是在一门课程之后做一个练习(如果有人好奇的话,在 FXPHD 的 pyt201),我们正在构建的其中一件事是一个 SequentialRange 类,它旨在表示镜头的帧。为简单起见,假设整数帧数并且没有奇怪的子帧渲染。

我正在实现的一种方法是add_frames(self, *frames)接受大量未指定的迭代并将它们添加进去。演示代码只是这样做:

for frame in imap(int, chain(*frames)):
        self.add(frame)

我想..

...避免这种行为,因为如果您传入格式错误的序列(例如,[1,2,”fish”,6,7]),您生成的 SequentialRange 将处于那些丑陋的半处理状态之一,这对任何人都没有帮助. 因为它是一个集合,所以我知道你可以只修补输入,然后读取它,然后欺骗将被抛出,但我想把它写下来,以便 add_frames() 操作更加二进制,或者成功加载所有帧,或者不会污染现有的集合。

基本上,我的思考过程是,我将有一个add_frame()方法,我会做任何必要的神秘巫术(现在只是self.add(int(the_input_frame_value))),这在某种程度上为我提供了我对输入的健全性检查。所以我可以从输入中创建一个临时集,如果成功,则将临时集和原始集合并。我发现的问题是联合返回我一个由两组联合组成的副本,所以我不得不求助于:

temporary_set = SequentialRange()
try:
    for frame in itertools.chain(*frames):
        temporary_set.add_frame(frame)
except ValueError:
    # placeholder flameout message
    print("malformed input, no changes made")
    return
except:
    raise

for x in temporary_set:
    self.add_frame(x)

它有效,但...

...我不相信重新遍历该系列是个好主意。感觉,呃……错了?主要是因为我已经遍历了我的输入以进行完整性检查,所以我不喜欢在添加阶段重复。

所以是的,关于我做错了什么有什么建议吗?我无法摆脱这样一种感觉,即我缺少一些可以使这更容易的东西,但与此同时,由于这是纯粹的学习,因此也欢迎使用替代方法来解决问题。

4

0 回答 0