Импорт списка из файла

Столкнулся с проблемой. Мне нужно импортировать список(movie_attr) из файла(parse.py) в главный файл проекта,но у меня никак не получается это сделать.

parse:

def top():
    r = requests.get('https://www.kinomania.ru/top/films')
    html = bs(r.content, 'html.parser')
    movie_cards = html.find_all('div', class_='table-top-item')
    movie_attrs = []
    for movie_card in movie_cards:
        movie_attrs.append({
            'title': movie_card.find('div', class_='table-top-title').get_text(),
            'rating': movie_card.find('span',class_='table-top-info-raiting').get_text()
        })
    for movie_attr in movie_attrs:
        return movie_attr
top()

Вот что выдает трэйсбек

Traceback (most recent call last):
  File "main.py", line 7, in <module>
    from parse import movie_attr
ImportError: cannot import name 'movie_attr' from 'parse' (/root/Рабочий стол/cinemabot/parse.py)

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

Автор решения: insolor

В функции top вы значение возвращаете, но при вызове никуда не сохраняете. return movie_attr возвращает не переменную, а только ее значение (после вызова top() переменная movie_attr не становится магическим образом глобальной переменной модуля).

Чтобы можно было получить это значение - его нужно сохранить в переменную:

def top():
    ...
    return movie_attr


movie_attr = top()

Также вместо импортирования переменной можно имопортировать и вызывать вызывать саму функцию top в другом модуле:

from parse import top

movie_attr = top()

Это удобно, например, если вдруг понадобится вызывать эту функцию с какими-то параметрами.

Также, обратите внимание, что цикл for в конце функции top возвращает только первое значение из списка movie_attrs (через return можно вернуть значение только один раз, т.к. return прерывает выполнение функции). Удобнее было бы возвращать весь список movie_attrs целиком без цикла.

→ Ссылка