我有一些代码将一个波分解成它的分量频率,并绘制出这些分量。这是绘图方法:
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如果返回多个波分量,则工作正常。有时,要么波本身不包含任何分量,要么有时算法只能识别单个分量。在这种情况下,单例波构成了组件列表,我得到了以下错误:
TypeError: 'AxesSubplot' object is not subscriptable我考虑用另一条except语句来处理这个问题:
except TypeError:
axes.plot(t_vec, self.components[0])
plt.show()这个确实管用。但是,我不确定这是否是正确使用错误处理?我对停止/处理错误的想法有点陌生,我想知道我所做的在实践中是否还好。
我想我的紧张来自于“如果抛出另一个TypeError是出于我没想到的原因呢?”
发布于 2020-08-02 18:29:47
您可以在plt.subplots行之后添加一个小检查:
if len(self.components) == 1:
axes = [axes]通常,有EAFP编码准则,为愉快的流和捕获异常进行编程是一种有效的编码方式。如果你担心的话,你只能在“尝试”中将冒犯的行包装起来--除非是块。
https://stackoverflow.com/questions/63219602
复制相似问题