Это хорошая практика кодирования для Python? - PullRequest
0 голосов
/ 07 января 2019
if preset.exists('//*[@id="i0116"]', '10', '1'):
    if (log.enter_username()):
        if preset.exists('//*[@id="i0116"]', '10', '1'):
            if (log.enter_password()):
                locked = unlock(details[0], details[1], browser, ' ', ' ', ' ')
                if not (locked.checkBlocked()):
                    # unlock account
                else:
                    searches = search(details[0], details[1], browser)
            else:
                browser.quit()
                continue
        else:
            browser.quit()
            continue
    else:
        browser.quit()
        continue
else:
    browser.quit()
    continue

Я делаю бота на Python, и у меня так много обработки исключений, что я мог бы получить как минимум еще 5 таких, если и другие ...

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

Ответы [ 2 ]

0 голосов
/ 07 января 2019

Первый и третий if чеки идентичны; удалить доп. Инвертируйте оставшиеся проверки и используйте ранний выход для устранения избыточного вложения.

if not preset.exists('//*[@id="i0116"]', '10', '1'):
    browser.quit()
    continue

if not log.enter_username():
    browser.quit()
    continue

if not log.enter_password():
    browser.quit()
    continue

locked = unlock(details[0], details[1], browser, ' ', ' ', ' ')
if not (locked.checkBlocked()):
    # unlock account
else:
    searches = search(details[0], details[1], browser)

Затем вы можете объединить три начальные проверки в одну.

if not (preset.exists('//*[@id="i0116"]', '10', '1') and
        log.enter_username() and
        log.enter_password()):
    browser.quit()
    continue

locked = unlock(details[0], details[1], browser, ' ', ' ', ' ')
if not locked.checkBlocked():
    # unlock account
else:
    searches = search(details[0], details[1], browser)
0 голосов
/ 07 января 2019

Если все ваши операторы else делают то же самое, то вы можете написать так:

if preset.exists('//*[@id="i0116"]', '10', '1') and log.enter_username() and preset.exists('//*[@id="i0116"]', '10', '1') and log.enter_password():
    locked = unlock(details[0], details[1], browser, ' ', ' ', ' ')
    if not (locked.checkBlocked()):
        # unlock account
    else:
        searches = search(details[0], details[1], browser)
else:
    browser.quit()
    continue
...