Python函数引用局部变量报UnboundLocalError 如何拼接两个DataFrame
问题解决方法
错误原因
df1是你第一次调用Concat函数时定义的局部变量,函数执行完毕后局部变量会被销毁,第二次传入x≠1调用函数时,当前函数作用域内完全没有定义过df1,直接调用自然会触发UnboundLocalError报错- 原有逻辑没有存储中间生成的
df1,跨函数调用无法共享变量
实现方案
方案1:调整逻辑在主函数层管理变量(推荐,无副作用逻辑更清晰)
将读取数据和拼接逻辑拆分,函数仅负责返回读取的DataFrame,在主函数中完成拼接:
import pandas as pd def read_df(url): return pd.read_json(url) def main(): # 读取对应url的两个DataFrame df1 = read_df("你的第一个url") df2 = read_df("你的第二个url") # 完成拼接 df3 = pd.concat([df1, df2], ignore_index=True) # 后续可对df3做其他处理 print(df3) if __name__ == "__main__": main()
方案2:保留原有x入参判断逻辑,用类存储中间变量
如果你必须保留传入x判断执行逻辑的写法,可以用类属性存储第一次生成的df1,实现跨调用共享:
import pandas as pd class ConcatHandler: def __init__(self): self.df1 = None def run(self, url, x): if x == 1: self.df1 = pd.read_json(url) else: if self.df1 is None: raise ValueError("请先传入x=1完成df1读取后再执行拼接") df2 = pd.read_json(url) df3 = pd.concat([self.df1, df2], ignore_index=True) return df3 def main(): handler = ConcatHandler() handler.run("你的第一个url", 1) df3 = handler.run("你的第二个url", 2) print(df3) if __name__ == "__main__": main()
内容的提问来源于stack exchange,提问作者Flybat Ramirez
相关产品推荐
相关产品推荐

