如何避免在赋值之前引用局部变量? [已关闭]

问题描述 投票:0回答:2

我正在创建一个函数来废弃谷歌搜索结果并用它们创建一个 df 。我在函数中遇到了一个问题,该变量显然是在赋值之前被引用的,并且我遇到了这个问题。

我正在使用 API 来搜索结果,它一次只能下载 100 个结果,因此我必须发出三个请求才能获取我需要的数量(前 300 个结果)。

我的目的是创建一个执行此操作的函数,同时在其参数中指定我需要搜索的查询;我要下载的结果数量(100,最大);以及启动请求的结果数(该参数必须为 0、100 和 200)。

def requester(query, start, results):
    
    headers = { 
    "apikey": ""}

    params = (
   ("q",query),
   ("num", results),
   ("start", start)
    )

    resp = requests.get('https://app.zenserp.com/api/v2/search', headers=headers, params=params);

    data = json.loads(resp.text)
    df_partial = pd.json_normalize(data["organic"])

    if start == 0:
        df = df_partial
    else:
        df=pd.concat(df, df_partial)

    df["query"] = query

创建函数后,我用这一行调用它:

start_points = [*range(0, 300, 100)]

for i in start_points:
  requester("my query", i, "100")

API所需的sintaxis没问题,只需要一个请求就可以下载信息。当我尝试实现此函数以在 if/else 语句中附加/连接对 API 的不同调用时,就会出现问题。有了这个声明,我的逻辑就是下一个:如果 start_point = 0,这意味着我的最终数据帧必须与使用 json 创建的 df_partial 相同,如果 start_point =/ 0 这意味着 df 已经存在,我只需要连接或附加新的(“df_partial”)已创建的“df”。

我得到的错误是:

UnboundLocalError: local variable 'df' referenced before assignment

我知道问题在于我定义变量“df_partial”和“df”的方式。但我无法解决它。

python pandas variables local
2个回答
0
投票
if start == 0:
    df = df_partial
else:
    df=pd.concat(df, df_partial)

else
部分指的是定义之前的
df
变量。


-1
投票
def requester(query, start, results):
    global df  # Declare df as a global variable
    headers = { 
    "apikey": ""}
    ...
© www.soinside.com 2019 - 2024. All rights reserved.