Оператор возврата не возвращает значение для электронной почты - PullRequest
1 голос
/ 08 марта 2019

Я пытаюсь написать что-то, что вернет текст письма после запуска. То, что у меня пока есть:

from exchangelib import Credentials, Account
import urllib3
from bs4 import BeautifulSoup

credentials = Credentials('fake@email', 'password')
account = Account('fake@email', credentials=credentials, autodiscover=True)

for item in account.inbox.all().order_by('-datetime_received')[:1]:
    html = item.unique_body
    soup = BeautifulSoup(html, "html.parser")
    for span in soup.find_all('font'):
        return span.text

Моя проблема с последней строкой чтения return span.text. Если бы я заменил эту строку на print(span.text), она отлично работает и печатает основной текст письма. Однако при замене на return выдается ошибка чтения SyntaxError: 'return' outside function. Я копался в проблеме, и я не могу понять, почему она выбрасывает эту проблему. Я новичок в Python и мог бы помочь. Что я могу сделать, чтобы решить эту проблему?

Ответы [ 2 ]

2 голосов
/ 08 марта 2019

Как указала бы ваша ошибка, вам нужно поместить return в функцию

from exchangelib import Credentials, Account
import urllib3
from bs4 import BeautifulSoup

credentials = Credentials('fake@email', 'password')
account = Account('fake@email', credentials=credentials, autodiscover=True)

def get_email(span): # a function that can return values
    return span.text

for item in account.inbox.all().order_by('-datetime_received')[:1]:
    html = item.unique_body
    soup = BeautifulSoup(html, "html.parser")
    for span in soup.find_all('font'):
        email_result = get_email(span) # call function and save returned value in a variable
1 голос
/ 08 марта 2019

зарезервированное слово return может использоваться только внутри такой функции, как:

def hello(name):
    return "hello " + name

если вы не собираетесь работать внутри функции (которой вы сейчас не), попробуйте сделать что-то вроде:

emails = []
for item in account.inbox.all().order_by('-datetime_received')[:1]:
    html = item.unique_body
    soup = BeautifulSoup(html, "html.parser")
    for span in soup.find_all('font'):
        emails.append(span.text)

Что происходит, теперь вы добавите объект span.text в список с именем emails. Затем вы можете использовать список для последующего использования.

...