Задать вопрос

Как упростить список исключений?

Суть такая: у меня длинный список исключений с if то-то or то-то or то-то и так где-то 100 исключений. И этот кусок кода у меня в коде повторяется гдето 70 раз
Можно ли как-то упростить это? Сделать как-то, чтобы в одном месте были эти исключения, а в коде на них ссылаться?
  • Вопрос задан
  • 239 просмотров
Подписаться 1 Оценить 7 комментариев
Пригласить эксперта
Ответы на вопрос 4
А что в m.text?
Пример:
Ну и допустим что m.text != ETH+DCR, иначе можно просто все условия положить в список и проверять m.text in list_if
Сделайте функцию
def check_if(value):
    list_if = [
        ('ETH+PASL', 7),
        ('ETH+DCR', 8),
        ('/pools', None),

        # и так далее
    ]
    for check_v, check_len in list_if:
        if value in check_v and ((check_len == len(value)) if check_len else True):
            return True


check_if(m.text)


так и расширять в последствии будет проще
Ответ написан
Комментировать
sim3x
@sim3x
def is_conditions_for_some_shit_pass(m):
  return ((m.text in '/Ethash' and len(m.text)>7) 
  or (m.text in '/DCR' and len(m.text)>3) 
  or (m.text in '/SIA' and len(m.text)>3) 
  # ....
  or (m.text in 'ETH+PASL' and len(m.text)==8) 
  or (m.text in 'ETH+DCR' and len(m.text)==7))

#####
if is_conditions_for_some_shit_pass(m): 
  pass
Ответ написан
Комментировать
lxsmkv
@lxsmkv
Test automation engineer
я даже не знаю что сказать. Предположительно набор условий можно упростить.

по теме: попробуйте засунуть группы условий в лямбды
#каждое условие отдельно
isGreaterThanFive = lambda x: x >5
isSmallerThanTen = lambda x: x<10

# или в виде комбинированого условия
matches_criteria_1 = lambda v: v >5 and v<10

n = 4
if (isGreaterThanFive(n) and isSmallerThanTen(n)):
  print "matches"
else:
  print "dont match"

v = 9
if (matches_criteria_1(v)):
  print "matches"
else:
  print "dont match"


P.S.: покажите мне if с 100 условиями, я такого никогда в жизни не видел. Пожалуйста.
Ответ написан
@TonicZz
Применение функций.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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