首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何正确处理单个元素上的迭代导致抛出错误的情况?

如何正确处理单个元素上的迭代导致抛出错误的情况?
EN

Stack Overflow用户
提问于 2020-08-02 18:21:54
回答 1查看 37关注 0票数 0

我有一些代码将一个波分解成它的分量频率,并绘制出这些分量。这是绘图方法:

代码语言:javascript
复制
    def plot_components(self):
        try:
            N = self.rate * self.time
            t_vec = np.arange(N) * self.period

            fig, axes = plt.subplots(len(self.components), 1)
            for i, wave in enumerate(self.components):
                axes[i].plot(t_vec, wave)
            plt.xlabel('Time')
            plt.ylabel('Amplitude')
            plt.show()
        except ValueError:
            print('plt_components: Encoder must be fit against composite wave before plotting')
            raise

如果返回多个波分量,则工作正常。有时,要么波本身不包含任何分量,要么有时算法只能识别单个分量。在这种情况下,单例波构成了组件列表,我得到了以下错误:

代码语言:javascript
复制
TypeError: 'AxesSubplot' object is not subscriptable

我考虑用另一条except语句来处理这个问题:

代码语言:javascript
复制
except TypeError:
   axes.plot(t_vec, self.components[0])
   plt.show()

这个确实管用。但是,我不确定这是否是正确使用错误处理?我对停止/处理错误的想法有点陌生,我想知道我所做的在实践中是否还好。

我想我的紧张来自于“如果抛出另一个TypeError是出于我没想到的原因呢?”

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-02 18:29:47

您可以在plt.subplots行之后添加一个小检查:

代码语言:javascript
复制
if len(self.components) == 1:
    axes = [axes]

通常,有EAFP编码准则,为愉快的流和捕获异常进行编程是一种有效的编码方式。如果你担心的话,你只能在“尝试”中将冒犯的行包装起来--除非是块。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63219602

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档