Я делаю некоторые пиплоты общих данных и преобразовываю их из значения мощности в значение в дБ. Из-за системы, из которой берутся эти значения, 0 используется как индикатор «полезные данные заканчиваются здесь» (характер математики, а не определенное значение).
Мой обычный способ справиться с этим - заключить конвертацию в попытку / исключение и вернуть значение по умолчанию 'low', например
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 вместо того, чтобы сбрасывать динамические значения ylim на основе минимума ydata (который я не делаю atm, в данном случае просто ylim (-140).)
Неопределенно важное обновление при ответе:
Ответ unutbu - это то, что я на самом деле буду использовать для своей реализации, потому что (не упомянутое в вопросных зависимостях), так как повышение StopIteration в этой регулярно используемой функции приводит к хаосу с несвязанной с вопросом логикой управления, не помещая все из этих других случаев в try-excepts; иногда -инф имеет больше смысла, чем вы думаете.
Спасибо всем за то, что вы были невероятно быстры, и я прошу прощения у unutbu за вопрос без ответа.