@ivan9727

UnboundLocalError: local variable referenced before assignment что делать?

Добрый день, есть парсер заходит логиниться собирает инфу перебериает ключи, но во время отправки сообщения в тг выходит ошибка if task_stack not in known_tasks and key in task_key:
UnboundLocalError: local variable 'task_stack' referenced before assignment
пробовал выставлять global
Подскажите пожалуйста в какую сторону копать.

def send_telegram(message, task):
    bot.send_message(message.chat.id, task)
def func (message):
    if (message.text == 'Включить Парсер'):
        bot.send_message(message.chat.id, "Запускаю парсер")
        leads = "n.php"
        main_key = config.KEY_WORDS
        url = config.URL + leads
        driver = webdriver.Firefox()
        driver.get(url)
        login = driver.find_element_by_xpath('/html/body/div[1]/div/div[2]/div/div[2]/div/div/form/div/div/div[1]/label/span/input')
        login.send_keys(config.LOGIN)

        time.sleep(0.1)

        passw = driver.find_element_by_xpath('/html/body/div[1]/div/div[2]/div/div[2]/div/div/form/div/div/div[2]/label/span/input')
        passw.send_keys(config.PASSWORD)

        click = driver.find_element_by_xpath('/html/body/div[1]/div/div[2]/div/div[2]/div/div/form/a')
        click.click()
        
        time.sleep(4)
        page = driver.page_source

        soup = bs(page, 'html.parser')
        known_tasks = []
        while True:
            for block in soup.find_all(class_=re.compile("OrderSnippetContainerStyles")):
                task_key = block.find(class_=re.compile("SnippetBodyStyles__Content")).get_text().replace('\n', ' ')
                name = block.find(class_=re.compile("StatusAndClientInfoStyles__Name")).get_text().replace('\n', ' ')
                task_stack = (task_key, name)
            for key in main_key:
                if task_stack not in known_tasks and key in task_key:
                    known_tasks.append(task_key)
                    send_telegram(str(''.join(task_stack)))
                known_tasks.append(task_stack)
            time.sleep(60)
            driver.get(url)
            page = driver.page_source
            soup = bs(page, 'html.parser')
  • Вопрос задан
  • 216 просмотров
Пригласить эксперта
Ответы на вопрос 2
fox_12
@fox_12 Куратор тега Python
Расставляю биты, управляю заряженными частицами
В этой строке
for block in soup.find_all(class_=re.compile("OrderSnippetContainerStyles"))

если в soup.find_all(class_=re.compile("OrderSnippetContainerStyles")) прилетит пустое множество, то task_stack не инициализируется, поскольку тело цикла не выполнится, и вылетит эта ошибка.
Вот в эту сторону и копайте.
Ответ написан
Vindicar
@Vindicar
RTFM!
Если цикл for block in soup.find_all не выполнится ни разу (например, нет подходящих элементов), то task_stack не будет присвоено значение. А ты дальше его читаешь.
Предусмотри какое-то значение по умолчанию для этой переменной, и проверяй такой случай.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы