我正在尝试编写一些将在运行后返回电子邮件正文的内容。到目前为止,我有:
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新手,可以使用一些帮助。我该怎么解决?
答案 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
的列表中。然后,您可以使用列表供以后使用。