hrbonz / python-aqi

A library to convert between AQI value and pollutant concentration (µg/m³ or ppm)
BSD 3-Clause "New" or "Revised" License
60 stars 28 forks source link

IndexError when PM concentration is higher than the defined maximum #27

Open stefanthoss opened 2 years ago

stefanthoss commented 2 years ago

I'm using version 0.6.1 of this library with the default EPA algorithm. When I provide a PM concentration that is higher than the upper limit defined by the maximum AQI range (i.e. it would result in an AQI above 500), the library fails with an IndexError.

The error gets thrown by the line https://github.com/hrbonz/python-aqi/blob/56f6e3bd8200205114307558e1d8329b7477d158/aqi/algos/base.py#L91 since the idx variable is larger than the AQI boundary array allows.

Complete error message:

  File "/home/pi/.local/lib/python3.7/site-packages/aqi/__init__.py", line 45, in to_aqi                                                                               
    return _aqi.aqi(ccs)
  File "/home/pi/.local/lib/python3.7/site-packages/aqi/algos/base.py", line 36, in aqi                                                                                
    _iaqi = self.iaqi(elem, cc)
  File "/home/pi/.local/lib/python3.7/site-packages/aqi/algos/base.py", line 91, in iaqi                                                                               
    (aqilo, aqihi) = self.piecewise['aqi'][idx]
IndexError: list index out of range
pjrobertson commented 1 year ago

An easier solution that I went with is:

AQI_MAX = 500
def my_function(self):
        try:
            return aqi.to_aqi(
                [(aqi.POLLUTANT_PM25, self.pm25),
                (aqi.POLLUTANT_PM10, self.pm10)]
                )
        except IndexError:
            # in some cases, the PM2.5/PM10 values can be 99999, which goes beyond the index.
            return AQI_MAX