Как обработать предупреждение OldEarthOrientationDataWarning для обновления таблицы IERS при импорте модуля astroplan (python 3) - PullRequest
0 голосов
/ 07 марта 2019

С одним из модулей, которые я сейчас использую ( astroplan ), он должен загрузить таблицу IERS, чтобы время в объектах Observer было точным. (Я использую его для тренировки времени восхода / захода солнца и т. Д.). Проблема в том, что через 14 дней или около того таблица становится устаревшей, и необходимо загрузить новую. Если таблица устарела, при импорте модуля выдается предупреждение OldEarthOrientationDataWarning .

Что я хотел бы сделать, так это определить, возникло ли предупреждение, и обновить таблицу, если есть предупреждение.

Обычно модуль импортируется с использованием:

>>> from astroplan import Observer

Я знаю, как обновить таблицу вручную, используя:

>>> from astroplan import download_IERS_A
>>> download_IERS_A()
>>> from astroplan import Observer

Я также знаю, что в Python есть модуль warnings , из которого я думаю, что функция catch_warnings - это то, что мне нужно использовать. Есть довольно много примеров того, как заставить код игнорировать предупреждения об устаревании, но я не хочу скрывать предупреждение. Я просто не могу понять, как это сделать, чтобы я делал то, что хочу.

Я использую Python 3, и мне нужен код для работы на машинах UNIX.

Любая помощь будет оценена, спасибо.

1 Ответ

0 голосов
/ 07 марта 2019

Думаю, я сам все разобрал. Я опубликую код ниже на случай, если кто-то еще захочет сделать то же самое.

import warnings

# Set up the thing to catch the warning (and potentially others)
with warnings.catch_warnings(record=True) as w:
    # import the modules
    from astroplan import Observer
    from astroplan import OldEarthOrientationDataWarning
    #One want to know aout the first time a warning is thrown
    warnings.simplefilter("once")

#Look through all the warnings to see if one is OldEarthOrientationDataWarning,
# update the table if it is.
for i in w:
    if i.category == OldEarthOrientationDataWarning:
        # This new_mess statement isn't really needed I just didn't want to print
        #  all the information that is produce in the warning.
        new_mess = '.'.join(str(i.message).split('.')[:3])
        print('WARNING:',new_mess)
        print('Updating IERS bulletin table...')
        from astroplan import download_IERS_A
        download_IERS_A()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...