TypeError: объект 'str' не поддерживает назначение элементов при попытке запуска через переменные для записи в них - PullRequest
0 голосов
/ 25 апреля 2020

Итак, у меня есть этот код:

answeariteration = 0
while answeariteration < int(numberofanswears):
    thread = reddbot.submission(url = str(submissionurl))
    globals()["answear" + str(answeariteration)] = "test"

    answear = thread.comments[answeariteration]

    "answear" [answeariteration] = str(answear)
    answeariteration += 1

, и когда я запускаю его, я получаю:

TypeError: 'str' object does not support item assignment

Я делаю некоторые переменные с именами, например, answerear0, answerear1, et c. Затем мне нужно написать, чтобы заменить тестовый текст в этих переменных на строку:

"answear" [answeariteration] = str(answear)

Это не позволит мне циклически проходить через каждое имя переменной.

1 Ответ

1 голос
/ 25 апреля 2020

Я думаю, вы имели в виду, что строка

"answear" [answeariteration] = str(answear)

будет

globals()["answear"+str(answeariteration)] = str(answear)

Но это не очень хороший способ сделать это. Вместо манипулирования именами переменных вы можете использовать dict. Может быть, что-то вроде этого:

answer = {}

answer_iteration = 0
while answer_iteration < int(numberofanswers):
    thread = reddbot.submission(url=str(submissionurl))
    answer[answer_iteration] = str(thread.comments[answer_iteration])
    answer_iteration += 1

И вы можете использовать for l oop вместо while.

answer = {}

for answer_iteration in range(numberofanswers):
    thread = reddbot.submission(url=str(submissionurl))
    answer[answer_iteration] = str(thread.comments[answer_iteration])

И вам, вероятно, не нужно делать нить каждый l oop, хотя я догадываюсь о некоторых вещах на данный момент.

answer = {}
thread = reddbot.submission(url=str(submissionurl))
for answer_iteration, comment in enumerate(thread.comments):
    answer[answer_iteration] = str(comment)

И теперь это достаточно просто, чтобы быть пониманием

thread = reddbot.submission(url=str(submissionurl))
answer = {i: str(comment) for i, comment in enumerate(thread.comments)}

Что может может быть упрощен до

thread = reddbot.submission(url=str(submissionurl))
answer = dict(enumerate(thread.comments))

, если комментарии уже были строками. Не уверен.

И это может быть упрощено до

thread = reddbot.submission(url=str(submissionurl))
answer = list(thread.comments)

или даже

answer = list(reddbot.submission(url=str(submissionurl)).comments)

Поскольку мы использовали цифровые клавиши, начиная с 0.

В этих случаях вместо answer0, answer1, answer2, et c можно использовать answer[0], answer[1], answer[2], et c.

...