Python UnboundLocalError从.bat运行.py(使用API);在命令提示符下运行良好

Python UnboundLocalError从.bat运行.py(使用API);在命令提示符下运行良好,python,batch-file,Python,Batch File,当我在Windows 10 Python 3.8.2上的命令提示符下执行命令时,我得到了预期的行为,并且数据按应有的方式保存(1.0.3打印用于故障排除): 但是,当我将其放入.bat文件时,在任何地方运行时都会出现以下错误: C:\Users\TwitterConv>python scrape-test.py neonphotography 1.0.3 Traceback (most recent call last): File "scrape-test.py&q

当我在Windows 10 Python 3.8.2上的命令提示符下执行命令时,我得到了预期的行为,并且数据按应有的方式保存(1.0.3打印用于故障排除):

但是,当我将其放入.bat文件时,在任何地方运行时都会出现以下错误:

C:\Users\TwitterConv>python scrape-test.py neonphotography
1.0.3
Traceback (most recent call last):
      File "scrape-test.py", line 333, in <module>
        main()
      File "scrape-test.py", line 322, in main
        user_ids = get_user_info(headers, filename)
      File "scrape-test.py", line 155, in get_user_info
        user_df = pandas.json_normalize(json_response["data"])
    UnboundLocalError: local variable 'json_response' referenced before assignment
我正试图从使用Mac的同事那里改编这个项目,我真的希望一旦我开始阅读批处理文件,这会很容易。我曾尝试使用pyinstaller作为解决方案,但这是一组全新的问题,所以我想从这里开始


为什么批处理文件运行不正常?

查看堆栈跟踪本身很有用。如果对twitter的调用失败,脚本就会像那样失败。在这种情况下,批处理文件与交互式命令行之间唯一可以合理区别的是,承载令牌在某种程度上是不同的。由于持票人代币中通常有百分比符号,因此可能存在某种情况

我们可以用一个简单的脚本来简化这一点:

#这是example.py
导入操作系统
打印(“承载令牌=[”+os.environ.get(“承载令牌”)+“]))
如果以交互方式运行,它将按预期工作:

C:\Example>set BEARER\u TOKEN=此%s是%an%示例%TOKEN
C:\Example>python Example.py
承载令牌=[此%为%an%示例%TOKEN]
但是,使用简单的批处理文件运行时,它将无法按预期工作:

@echo关闭
这是example.cmd
set BEARER_TOKEN=此%是%an%示例%TOKEN
python3示例.py
C:\Example>Example.cmd
持票人令牌=[thisantoken]
您需要转义批处理文件中的百分比符号,因为它们的解析方式不同于交互式提示:

@echo关闭
rem这是固定的example.cmd
set BEARER_TOKEN=此%%为%%example%%令牌
python3示例.py
C:\Example>Example.cmd
承载令牌=[此%为%an%示例%TOKEN]

批处理文件中缺少
CD
命令。您可能还希望在
CD
命令中使用
/D
选项,以防工作目录是不同的驱动器号。这只是一个输入错误。.bat文件位于目标文件夹中,因此我甚至不需要设置目录来访问该文件。但是我移动了.bat文件并确保修复了
CD
,问题仍然存在。当我使用
/D
时,我得到了
/D不可识别
错误。谢谢你的反馈。我将修复这些示例。
cd/D C:\Users\TwitterConv
不会导致该错误。你是对的。但正确的语法仍然存在问题。我已经更新了我的问题。哇。成功了!非常感谢你的帮助。我花了几个小时在stackoverflow中筛选,试图了解出了什么问题。我现在要删除我的.py文件。@Domlock,这就是为什么人们在StackOverFlow注册时会被要求阅读该文件的原因。学习一个问题。并提供一个。在您的案例中,您从未提供过可复制的示例。因为这个问题解决了你的问题,你现在可以阅读了。
C:\Users\TwitterConv>python scrape-test.py neonphotography
1.0.3
Traceback (most recent call last):
      File "scrape-test.py", line 333, in <module>
        main()
      File "scrape-test.py", line 322, in main
        user_ids = get_user_info(headers, filename)
      File "scrape-test.py", line 155, in get_user_info
        user_df = pandas.json_normalize(json_response["data"])
    UnboundLocalError: local variable 'json_response' referenced before assignment
SET BEARER_TOKEN=xyz
cd /D C:\Users\TwitterConv
python scrape-test.py neonphotography