Python 如何在函数中使用局部变量,就像在其他函数中使用全局变量一样

Python 如何在函数中使用局部变量,就像在其他函数中使用全局变量一样,python,selenium,global-variables,sendmail,smtplib,Python,Selenium,Global Variables,Sendmail,Smtplib,我在selenium上编写了一个简单的测试,可以在某个站点上进行身份验证,解析HTML代码的某些部分,并将电子邮件发送到所需的邮箱。我想让一切都变得漂亮,我决定为这段代码定义函数 我的代码: from selenium.webdriver.support.ui import Select from selenium.webdriver.chrome.options import Options from selenium import webdriver import smtplib CHRO

我在selenium上编写了一个简单的测试,可以在某个站点上进行身份验证,解析HTML代码的某些部分,并将电子邮件发送到所需的邮箱。我想让一切都变得漂亮,我决定为这段代码定义函数

我的代码:

from selenium.webdriver.support.ui import Select
from selenium.webdriver.chrome.options import Options
from selenium import webdriver
import smtplib

CHROME_PATH = '/usr/bin/google-chrome'
CHROMEDRIVER_PATH = '/usr/local/bin/chromedriver'
WINDOW_SIZE = "1024,768"

def pgi_auth(sitename, region_pgi, login_pgi, password_pgi):
    chrome_options = Options()
    chrome_options.add_argument("--headless")
    chrome_options.add_argument("--window-size=%s" % WINDOW_SIZE)
    chrome_options.binary_location = CHROME_PATH
    driver = webdriver.Chrome(executable_path=CHROMEDRIVER_PATH,chrome_options=chrome_options)
    driver.get(sitename)
    driver.find_element_by_id("LoginId").send_keys(login_pgi)
    driver.find_element_by_id("LoginPassword").send_keys(password_pgi)

    option = Select(
        driver.find_element_by_xpath("//select[@name='Region']")
    ).select_by_value(region_pgi)

    driver.find_element_by_id("submit").click()

    element = driver.find_element_by_id("TotalCurrentCharges-body").text

    current_charges = element.splitlines()[1]
    print(current_charges)
    driver.quit()

def send_email(host, port, from_addr, password, to_addr, subject, current_charges):
    BODY = "\r\n".join((
        "From: %s" % from_addr,
        "To: %s" % to_addr,
        "Subject: %s" % subject ,
        "",
        body_text
    ))
    server = smtplib.SMTP(host, port)
    server.starttls()
    server.login(from_addr, password)
    server.sendmail(from_addr, [to_addr], BODY)
    server.quit()

#for pgi_auth
sitename="https://invoiceaccess.pgiconnect.com"
login_pgi="my_secret_login"
password_pgi="my_secret_password"
region_pgi="us"

#for send_email
host = "mail.example.com"
port = "587"
from_addr = "test.mail@example.com"
password = "my_secret_password"
to_addr = "test.receive@example.com"
subject = "MY BALANCE:"

pgi_auth(sitename, region_pgi, login_pgi, password_pgi)
send_email(host, port, from_addr, password, to_addr, subject, current_charges)
在我的函数
pgi\u auth
中,我接收可变
当前\u费用

我想在函数
send\u email
pgi\u auth
之外使用此变量。当然,我可以在没有函数的情况下实现这一点,但我想尝试让一切都变得漂亮(也许我会使用config),如何才能在函数之外获得此变量?

您需要
在方法中返回
关键字

def pgi_auth(sitename, region_pgi, login_pgi, password_pgi):
    .....
    .....
    return current_charges

....
....
subject = "MY BALANCE:"

current_charges = pgi_auth(sitename, region_pgi, login_pgi, password_pgi)
send_email(host, port, from_addr, password, to_addr, subject, current_charges)

制作
pgi\u auth
返回
current\u charges
并在代码末尾使用
current\u charges=pgi\u auth(sitename…
调用它。然后将
当前费用
传递到
发送电子邮件
@Flob抱歉?我试图返回,但它说,
namererror:name'current_charges'没有定义
这很奇怪,因为您在前面两行定义了它。。。我很抱歉,但我真的不知道这可能是什么原因。对不起,但它说,
name错误:name'current\u charges'没有定义
尝试更改变量,用于
current\u charges=pgi\u auth(…
发送电子邮件(…,current\u charges)
其他我不明白。是的,它有效。谢谢