Bol*_*ter 9 python functional-programming exception-handling exception map-function
我正在做一些通用数据的 pyplotting 并将其从功率值转换为dB值.由于这些值来自系统,因此0用作"此处有用数据结束"指标(数学的性质,而不是定义的值).
我通常的处理方法是在try/except中包含转换并返回默认的"low"值,例如
def f(value):
try:
return convert(value)
except ValueError:
return -140 #implementation specific, don't worry
Run Code Online (Sandbox Code Playgroud)
对于我的框架中90%的使用情况,这是很好的和花花公子,除了图形.
我很懒,所以我现在做的是:
pl.plot(xvals,map(f,yvals))
Run Code Online (Sandbox Code Playgroud)
这会正确地绘制数据,并且当数据结束时,会从悬崖上掉下来,这是预期的行为.但我想发生这样的是图形刚刚结束时,它满足了ValueError异常,并以F做掉()完全.
除了将地图分成一个循环,任何人都有任何好主意?
更新:
我正在使用Pylab/MatplotLib"端点"是执行依赖的; 有时上述并不重要,因为没有"坏"值.这一切都是为了让我懒惰并使用matplotlibs图缩放而不是基于ydata的min来重置动态ylim(在这种情况下我不做atm,只是ylim(-140).)
关于答案的模糊重要更新:unutbu的答案就是我实际将用于实现的内容,因为(在问题依赖项中没有提到),因为在这个经常使用的函数中引发StopIteration会对无关紧要的问题造成严重破坏控制逻辑,而不是将所有其他实例放在try-excepts中; 有时候-inf比你想象的更有意义.
感谢大家的速度非常快,我为在QuestionFail的unutbu道歉.
小智 10
也许在绘图库中有一些技巧,但更好的选择似乎不会产生这样的数据.这不是为map
你节省了三十行代码......
使用itertools.takewhile(lambda y: y != NO_VALUE, (f(y) for y in yvals))
(list
如果绘图库需要列表而不是迭代,则将其包装在调用中).
编辑:我有一个更好的主意:在包装器中,添加
except ValueError:
raise StopIteration
Run Code Online (Sandbox Code Playgroud)
这是异常信号"迭代结束",并map
尊重它.
归档时间: |
|
查看次数: |
2736 次 |
最近记录: |