Избегание нескольких блоков Try / Except в Python

Это известная проблема, и одно возможное решение предоставляется drop.levels() в пакете gdata , где ваш пример становится

> drop.levels(subdf)
  letters numbers
1       a       1
2       b       2
3       c       3
> levels(drop.levels(subdf)$letters)
[1] "a" "b" "c"

Существует также dropUnusedLevels в пакете Hmisc . Однако он работает только путем изменения оператора подмножества [ и здесь неприменим.

В качестве следствия прямой подход на основе столбца является простым as.factor(as.character(data)):

> levels(subdf$letters)
[1] "a" "b" "c" "d" "e"
> subdf$letters <- as.factor(as.character(subdf$letters))
> levels(subdf$letters)
[1] "a" "b" "c"

0
задан Matthew Loh 2 March 2019 в 14:44
поделиться

1 ответ

У вас есть много разделов кода, которые в основном делают одно и то же, что нарушает принцип «Не повторяйся (СУХОЙ)» . Обычный способ избежать этого повторения - написать функцию, которая скрывает повторение.

def get_text_or_NA(container):
    try:
        result = container[0].getText()
    except:
        result = 'NA'
    return result

Тогда ваш основной код -

Age = get_text_or_NA(Age_find)
Tm = get_text_or_NA(Tm_find)
Lg = get_text_or_NA(Lg_find)

и т. Д.

Вы можете использовать аналогичные средства для удаления других повторений в своем коде - я оставлю это вам. И, как говорится в комментарии @roganjosh, вам не следует использовать except: без исключения. Ваш путь просто скрывает все проблемы. Будьте более конкретны и скрывайте только те исключения, которые ожидаете, так что неожиданные могут быть обнаружены на более высоком уровне.

0
ответ дан Rory Daulton 2 March 2019 в 14:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: