Python Requests使用输入的登录字符串时触发NameError未定义错误
问题原因
- 触发
NameError的核心原因是变量作用域问题:你在profiles()函数内部定义的LOGIN、PASSWORD属于函数局部变量,仅在profiles函数执行过程中生效,函数外部(包括调用它的Checkout函数作用域内)无法直接访问这两个变量。 - 额外注意你的业务代码中未导入
requests库,后续运行也会触发导入类报错。
修复方案
1. 修改profiles.py代码,让函数返回输入的账号密码
def profiles(): LOGIN = input("Enter your login email: ") print(LOGIN) PASSWORD = input("Enter your login password: ") print(PASSWORD) # 新增返回语句,把两个值返回给调用方 return LOGIN, PASSWORD
2. 修改业务代码,接收profiles()返回的变量,同时补全requests导入
import requests from profiles import profiles def Checkout(): # 接收profiles函数返回的两个值,赋值给当前作用域的LOGIN、PASSWORD变量 LOGIN, PASSWORD = profiles() login = { 'inUserName': LOGIN, 'inUserPass': PASSWORD } with requests.Session() as s: p = s.post('https://EXAMPLEWEBSITE.com/account/login', data=login)
补充说明
- 不推荐用全局变量传值,函数返回是更规范、可维护性更高的写法
- 如果需要密码输入时隐藏输入内容,可以改用
getpass库的getpass方法替代input
内容的提问来源于stack exchange,提问作者stevieg613
相关产品推荐
相关产品推荐

