我正在对通用数据进行一些 pyplotting并将其从功率值转换为 dB 值。由于这些值来自系统,0 被用作“有用数据到此结束”的指示符(数学的性质,不是定义的值)。
我通常的处理方法是将转换包装在 try/except 中并返回默认的“低”值,例如
def f(value):
try:
return convert(value)
except ValueError:
return -140 #implementation specific, don't worry
这对于我的框架内 90% 的使用来说都很好而且很花哨,除非涉及到图形。
我很懒所以我现在做的是:
pl.plot(xvals,map(f,yvals))
这会正确地绘制数据,当数据结束时,会从悬崖上掉下来,这是预期的行为。但是我希望图表在遇到 ValueError 异常时结束并完全取消 f() 。
除了将地图分解成一个循环之外,有人有什么绝妙的想法吗?
更新:
我正在使用 Pylab / MatplotLib “端点”依赖于执行;有时上述内容根本不重要,因为没有“坏”值。这一切都是为了让我变得懒惰并使用matplotlibs图形缩放而不是根据ydata的最小值重置动态ylim(在这种情况下我不做atm,只是ylim(-140)。)
关于答案的模糊重要更新:unutbu 的答案是我实际将用于我的实现的,因为(在问题依赖项中没有提到),因为在这个经常使用的函数中引发 StopIteration 会对与问题无关的问题造成严重破坏控制逻辑,而不将所有其他实例放在 try-excepts 中;有时 -inf 比你想象的更有意义。
感谢大家的速度非常快,我为 QuestionFail 向 unutbu 道歉。