Ошибка TypeError: must be str, not list

Хочу в переменную passsword генерировать один случайный символ с списков, а список для выбора символа также выбирается случайно. При запуске кода происходит ошибка:

ОШИБКА:

Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation.  All rights reserved.

C:\Users\Admin>cd Desktop

C:\Users\Admin\Desktop>python telegrambot.py
2020-11-19 13:22:09,503 (util.py:75 WorkerThread2) ERROR - TeleBot: "TypeError o
ccurred, args=('must be str, not list',)
Traceback (most recent call last):
  File "C:\Users\Admin\AppData\Local\Programs\Python\Python36-32\lib\site-packag
es\telebot\util.py", line 69, in run
    task(*args, **kwargs)
  File "telegrambot.py", line 209, in send_message
    generate()
  File "telegrambot.py", line 110, in generate
    password += random.choice(letters + digits + symbols)
TypeError: must be str, not list
"

КОД:

import string
import random
import config

length = 0
password = ''

def generate(*args):
            global password

            if use_english == 'да':
                letters = string.ascii_letters
            else:
                letters = ['']
            if use_figures == 'да':
                digits = string.digits
            else:      # присваивание в зависимости от того на какую кнопку человек нажмет в боте телеграмм, КНОПКИ ИМЕЮТ КОДЫ 
                digits = ['']
            if use_symbols == 'да':
                symbols = config.symbols_list
            else:
                symbols = ['']

            if use_english == 'нет' and use_figures == 'нет' and use_symbols == 'нет':
                error_settings2()
            elif length <= 1:
                error003()
            else:
                for x in range(10):
                    password = ''

                    for i in range(length): # Длина берется из ответа пользователя в боте телеграмм
                        password += random.choice(letters + digits + symbols)
                    bot.send_message(message.chat.id, '{0}' .format(password))

Это возможно сделать маленьким кодом?


Ответы (1 шт):

Автор решения: Vadim.Sharoikin

ошибка в этой строке

password += random.choice(letters + digits + symbols)

судя по всему вы пытаетесь сложить 2 строки(letters,digits) и список(symbols). можно преобразовать список в строку используя join

password += random.choice(letters + digits + ''.join(symbols)) 
→ Ссылка