【发布时间】:2011-07-26 06:09:37
【问题描述】:
我正在对 通用数据 进行一些 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 异常时 end 并完全取消 f()。
除了将地图分解成一个循环之外,还有人有什么绝妙的想法吗?
更新:
我正在使用 Pylab / MatplotLib “端点”取决于执行;有时上述内容根本不重要,因为没有“坏”值。这一切都是为了让我变得懒惰并使用matplotlibs图形缩放而不是根据ydata的最小值重置动态ylim(我不做atm,在这种情况下只是ylim(-140)。)
关于答案的模糊重要更新: unutbu 的答案是我实际上将用于我的实现的,因为(在问题依赖项中没有提到),因为在这个经常使用的函数中引发 StopIteration 会对与问题无关的控制逻辑造成严重破坏,而不是把所有try-excepts 中的其他实例;有时 -inf 比你想象的更有意义。
感谢大家的速度非常快,我为 QuestionFail 向 unutbu 道歉。
【问题讨论】:
-
这个问题有点不清楚。如果你把地图分解成一个循环,你能展示一下它会是什么样子吗?
标签: python exception exception-handling functional-programming map-function