Python CMD或.bat文件执行中出现Google_api凭据错误,但IDE中没有

Python CMD或.bat文件执行中出现Google_api凭据错误,但IDE中没有,python,cmd,google-api,Python,Cmd,Google Api,我有一个python脚本,当我从Spyder或Jupyter Notebook或whateverIDE或Visual Studio编译它时,它运行良好;然而,当我试图从命令提示符下运行它时,我得到了以下错误 第50行,在func_get_credentials_ret_服务中 if not creds或not creds.valid:UnboundLocalError:赋值前引用的局部变量'creds' 我已经尝试过屏蔽get凭证代码等的某些部分,但我认为由于非常明显的原因,这不是一个解决方案

我有一个python脚本,当我从Spyder或Jupyter Notebook或whateverIDE或Visual Studio编译它时,它运行良好;然而,当我试图从命令提示符下运行它时,我得到了以下错误

第50行,在func_get_credentials_ret_服务中 if not creds或not creds.valid:UnboundLocalError:赋值前引用的局部变量'creds'

我已经尝试过屏蔽get凭证代码等的某些部分,但我认为由于非常明显的原因,这不是一个解决方案

如果在.bat文件中以命令形式运行,则不起作用(给出相同的错误)

提前感谢您提供的任何帮助。 以下是相关的代码部分

from __future__ import print_function
import pickle
import os.path
from googleapiclient.discovery import build
from google_auth_oauthlib.flow import InstalledAppFlow
from google.auth.transport.requests import Request
from Message_list import ListMessagesMatchingQuery
from dateutil import parser
import datetime as dt
import pprint
import sys
import base64
from apiclient import errors
import pandas as pd
import holidays

def func_get_credentials_ret_service():
    ##########################################################################
    ## From google api page
    ##
    ##########################################################################
    SCOPES = ['https://www.googleapis.com/auth/gmail.readonly']
    if os.path.exists('token.pickle'):
        with open('token.pickle', 'rb') as token:
            creds = pickle.load(token)
    # If there are no (valid) credentials available, let the user log in.
    if not creds or not creds.valid:
        if creds and creds.expired and creds.refresh_token:
            creds.refresh(Request())
        else:
            flow = InstalledAppFlow.from_client_secrets_file(
                'credentials.json', SCOPES)
            creds = flow.run_local_server(port=0)
        # Save the credentials for the next run
        with open('token.pickle', 'wb') as token:
            pickle.dump(creds, token)

    service = build('gmail', 'v1', credentials=creds)

    return service

service = func_get_credentials_ret_service()
results = ListMessagesMatchingQuery(service, "me", 'from: "someprovider.com"')
id_list = func_create_id_list(results)
答复: 您正在对变量
creds
进行比较,然后才为其赋值

修正: 该行:

如果没有信用或信用无效:
如果
token.pickle
文件存在,则将执行,但是在调用该文件之前,没有变量
creds
的赋值

范围的定义之后添加此行:

creds=None
回答: 您正在对变量
creds
进行比较,然后才为其赋值

修正: 该行:

如果没有信用或信用无效:
如果
token.pickle
文件存在,则将执行,但是在调用该文件之前,没有变量
creds
的赋值

范围的定义之后添加此行:

creds=None

您需要从包含
.py
文件的目录中运行python命令。使用
cd
切换到目录,然后运行
python-Get\u-portfolio\u-from\u-vpm\u-set\u-up\u-cramer\u-trades.py
。好的,不用担心!这是一个不同的错误,所以我认为最好把它作为一个新问题来问。如果您可以接受这个答案,因为它解决了原始问题中的错误,并提出了一个新问题,其中包含了对社区真正有帮助的所有相关细节-最好保留对主题的评论,并且很难通过评论调试错误。有效的方法是更改目录。creds=None行最终创建了一个问题。非常感谢。对于任何关心的人:如果您有一个用于执行python脚本的bat文件,只需在bat文件的第一行添加:cd“path to credentials file”,它就可以工作了。Rafa再次感谢。
分配前引用的局部变量“creds”
通过添加
creds=None
行得到解决,解决此错误后还需要更改目录。
creds=None
行是。您需要从包含
.py
文件的目录中运行python命令。使用
cd
切换到目录,然后运行
python-Get\u-portfolio\u-from\u-vpm\u-set\u-up\u-cramer\u-trades.py
。好的,不用担心!这是一个不同的错误,所以我认为最好把它作为一个新问题来问。如果您可以接受这个答案,因为它解决了原始问题中的错误,并提出了一个新问题,其中包含了对社区真正有帮助的所有相关细节-最好保留对主题的评论,并且很难通过评论调试错误。有效的方法是更改目录。creds=None行最终创建了一个问题。非常感谢。对于任何关心的人:如果您有一个用于执行python脚本的bat文件,只需在bat文件的第一行添加:cd“path to credentials file”,它就可以工作了。Rafa再次感谢。
分配前引用的局部变量“creds”
通过添加
creds=None
行得到解决,解决此错误后还需要更改目录。
creds=None
行为空。