退货声明未返回电子邮件的值

时间:2019-03-08 18:30:02

标签: python error-handling beautifulsoup 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)

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 个答案:

答案 0 :(得分:2)

您的错误将表明,您需要将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 :(得分:1)

保留字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的列表中。然后,您可以使用列表供以后使用。