Python; map () с учетом исключений ()

Я делаю некоторую пиплоттинг общих данных и конвертирую их из значение мощности в дБ. Из-за системы, из которой берутся эти значения, 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 за вопрос.

9
задан Martijn Pieters 2 September 2016 в 20:51
поделиться