PYTHON 3.10: Ошибка, вызывающая понимание списка для str.strip() и str.replace() неожиданно

#python-3.x

Вопрос:

Я пытаюсь удалить набор кавычек вокруг строковых элементов в списке, но вижу, что возникла ошибка. Кажется, я отчетливо помню, как выполнял эту операцию раньше, но, к счастью, я не смог найти предыдущий проект кода, в котором я сделал это бегло. Вот мой код:

 result = cur.fetchall() # result = (1, 2, 3,) or result = ((1, 3), (4, 5),)   result = [list(item) for item in result]   final_result = [item.strip("'", "") for item in result]  except (Exception, psycopg2.DatabaseError) as error:  print(error)  finally:  if conn is not None:  conn.close()  return final_result  

Результатом этого кода является: объект «список» не имеет атрибута «полоса»

Я также попытался .strip (), но возникла ошибка того же типа. Я что-то упускаю/забываю нюанс python 3.x?

Комментарии:

1. Также добавляя, что я попытался решить проблему с помощью .join (), чтобы отправить его обратно в строку, затем в той же операции вернуться в список с удалением символов, и вот, возникла ошибка того же типа. Я довольно хорошо разбираюсь в Python, так что я немного заблудился в этом вопросе.

2. в списках нет атрибута strip, что означает, что вы не можете вызывать .strip() список, и вы определяете каждый элемент result как список. Так может быть, попробуем [[elem.strip("'") for elem in item] for item in result] ?

Ответ №1:

В случае, если вы начнете с result = ((1, 3), (4, 5),) того, что указано в комментарии, после:

 result = [list(item) for item in result]  

result будет список списков:

 [[1, 3], [4, 5]]  

При вычислении final_result вы повторяете этот список списков и применяете strip его к элементу (который является списком), поэтому появляется ошибка:

 AttributeError: 'list' object has no attribute 'strip'  

Комментарии:

1. Спасибо тебе, Дэн. Да, я, наконец, осознал свою ошибку и переключился на оператор понимания вложенного списка, который отлично работал. По какой-то причине я не понял, что вложил список в эту строку.