Я делаю некоторую пиплоттинг общих данных и конвертирую их из значение мощности в дБ. Из-за системы, из которой берутся эти значения, 0 используется как индикатор «здесь заканчиваются полезные данные» (природа математики, а не определенное значение).
Мой обычный способ работа с ними заключается в том, чтобы обернуть преобразование в try / except и вернуть «низкое» значение по умолчанию, например
def f(value):
try:
return convert(value)
except ValueError:
return -140 #implementation specific, don't worry
Это нормально и красиво для 90% использования в моей структуре, за исключением случаев, когда дело касается построения графиков.
I Я ленив, поэтому сейчас я делаю следующее:
pl.plot(xvals,map(f,yvals))
При этом данные отображаются правильно, а когда данные заканчиваются, падает с обрыва, что является ожидаемым поведением. Но я бы хотел, чтобы граф просто заканчивался , когда он встречает исключение ValueError, и полностью избавлялся от f ().
Кроме разбиения карты на цикл, любой получил есть блестящие идеи?
ОБНОВЛЕНИЯ:
Я использую Pylab / MatplotLib «Конечная точка» зависит от исполнения; иногда вышеперечисленное вообще не имеет значения, поскольку нет «плохих» значений. Все это сделано для того, чтобы я был ленив и использовал масштабирование графика matplotlibs вместо сброса динамического ylim на основе min ydata (что я не делаю atm, в данном случае просто ylim (-140))
Неопределенно важное обновление по ответу: Ответ unutbu - это то, что я на самом деле буду использовать для своей реализации из-за (не упомянутого в зависимостях вопроса), поскольку повышение StopIteration в этой регулярно используемой функции наносит ущерб логике управления, не связанной с вопросом, не помещая все этих других экземпляров в try-excepts; иногда -inf имеет больше смысла, чем вы думаете.
Спасибо всем за невероятную скорость, и я приношу свои извинения перед unutbu за вопрос.