TypeError: может только объединить кортеж (не "str") в кортеж. проблема с виджетами - PullRequest
0 голосов
/ 27 мая 2020

Я пытаюсь получить информацию с веб-сайта в виджете, он работает, но я хочу, чтобы каждый фрагмент текста, который он «находит», отображался в новой строке. Я пробовал + '/ n' и + '' '' ''), но получаю ту же ошибку.

def Supplies_scraper():
    if instorechoices1.counter !=1:
        url='(url)'
        web_page=urlopen(url)
        html_code=web_page.read().decode("UTF-8")
        web_page.close()
        products = (findall('''data-desc =(.*?)data-price =''',html_code))[:5],


        shopping_list.delete(0.0, END)
        shopping_cart.delete(0.0, END)



        if products:
            shopping_list.insert(0.0, products + '/n')


            shopping_list.insert(0.0, '''Source: (URL)
''')
            shopping_list.insert(0.0,'''--------{ Best Health Supplies }-------
''')

    elif instorechoices1.counter ==1:
        shopping_list.delete(0.0, END)
        shopping_list.insert(END, 'Due to shortages there is only 1 of each item category per order'+ '\n')

    if instorechoices1.counter != 2:
        instorechoices1.counter +=1

1 Ответ

1 голос
/ 27 мая 2020

Обратите внимание, что у вас есть завершающая строка в этой строке

products = (findall('''data-desc =(.*?)data-price =''',html_code))[:5],

, что означает, что после products это tuple, попытка конкатенации кортежа с str или str с кортежем приведет к

TypeError: can only concatenate tuple (not "str") to tuple

Это конечный , намеренно в вашем коде? Если не удалите его и проверьте, какой он тип, например, выполнив:

products = (findall('''data-desc =(.*?)data-price =''',html_code))[:5]
print(type(products))

Если это str, вы можете объединить его с \n, если это tuple или list вам нужно сначала преобразовать его для str, если все элементы list или tuple равны str s, вы можете использовать .join следующим образом:

my_tuple = ('1','2','3')
my_list = ['1','2','3']
joined_tuple = ','.join(my_tuple)
joined_list = ','.join(my_list)
print(joined_tuple)  # 1,2,3
print(joined_list)  # 1,2,3
...