gpt4 book ai didi

python - 使用 Python Dropbox API 的 UnboundLocalError 问题

转载 作者:太空狗 更新时间:2023-10-30 02:48:32 25 4
gpt4 key购买 nike

我正在尝试在 python 中创建一个类,它读取保管箱的访问 key / secret ,然后下载一个文件。关键/ secret 部分工作正常,但我似乎在识别客户端对象时遇到问题,可能是由于全局变量与局部变量的问题。我在其他任何地方都找不到我的答案。

这是我的部分代码:

from dropbox import client, rest, session

class GetFile(object):

def __init__(self, file1):
self.auth_user()

def auth_user(self):
APP_KEY = 'xxxxxxxxxxxxxx'
APP_SECRET = 'xxxxxxxxxxxxxx'
ACCESS_TYPE = 'dropbox'
TOKENS = 'dropbox_token.txt'

token_file = open(TOKENS)
token_key,token_secret = token_file.read().split('|')
token_file.close()

sess = session.DropboxSession(APP_KEY,APP_SECRET, ACCESS_TYPE)
sess.set_token(token_key,token_secret)
client = client.DropboxClient(sess)

base, ext = file1.split('.')

f, metadata = client.get_file_and_metadata(file1)
out = open('/%s_COPY.%s' %(base, ext), 'w')
out.write(f.read())

这里是错误:

Traceback (most recent call last):
File "access_db.py", line 30, in <module>
start = GetFile(file_name)
File "access_db.py", line 6, in __init__
self.auth_user()
File "access_db.py", line 20, in auth_user
client = client.DropboxClient(sess)
UnboundLocalError: local variable 'client' referenced before assignment

我是 python 的新手,所以如果还有其他明显的地方我可能做错了,请告诉我。

最佳答案

您将 dropbox.client 模块作为 client 导入到您的模块作用域中,但是您有一个局部变量 client 在您的 .auth_user() 方法中。

当 python 在编译时看到函数中有赋值(例如 client =),它会将那个名称标记为局部变量。此时,您导入的client module 注定失败,它不再以该名称在您的函数中可见。

接下来,在 python 看来,您正在尝试访问函数中的局部变量 client;您正在尝试从中获取属性 DropboxClient,但此时您还没有为变量client 分配任何。所以抛出了UnboundLocal异常。

解决方法是不使用 client 作为局部变量,导入顶级 dropbox 模块而不是它的子模块,然后使用完整的 dropbox.client 等路径,或者第三,给 client 模块一个新名称:

  1. 不要将 client 用作本地:

    dbclient = client.DropboxClient(sess)
    # ...
    f, metadata = dbclient.get_file_and_metadata(file1)
  2. 直接导入dropbox模块:

    import dropbox
    # ...

    sess = dropbox.session.DropboxSession(APP_KEY,APP_SECRET, ACCESS_TYPE)
    # ...
    client = dropbox.client.DropboxClient(sess)
  3. client 模块提供一个别名:

    from dropbox import session, rest
    from dropbox import client as dbclient
    # ...

    client = dbclient.DropboxClient(sess)

关于python - 使用 Python Dropbox API 的 UnboundLocalError 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12438022/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com