Python操作GKE集群报错NameError:name 'name'未定义求解决
问题排查与解决方案
错误原因
你遇到的NameError: name 'name' is not defined是因为代码里的cluster[name]把name当成了变量,但你并没有定义过这个变量。而实际上,字典的键是字符串类型,你需要用引号把键名包裹起来,也就是用cluster['name']来访问集群名称。
修正后的代码
另外还有个小问题:你在for cluster in response['clusters']循环内每次都初始化li = [],这样每次循环都会创建新列表,只能保存当前单个集群的名字。应该把列表初始化放到循环外面,才能收集所有集群名称。同时读取文件时,每行末尾可能带有换行符,建议用strip()处理掉,避免传递给gcloud命令时出错。
修正后的代码如下:
with open("abc.txt", "r") as f: for x in f: # 去掉换行符和空白字符 project_id = x.strip() subprocess.run(["gcloud", "config" ,"set" ,"project", project_id ]) request = service.projects().zones().clusters().list(projectId=project_id, zone='-') response = request.execute() if 'clusters' in response: # 把列表初始化放到集群循环外面 li = [] for cluster in response['clusters']: # 使用字符串键'name'访问字典值 li.append(cluster['name']) print(li)
额外说明
从你打印的cluster字典结构可以看到,'name'是字符串类型的键,所以必须用引号包裹才能正确访问对应的值。如果不加引号,Python会认为你在引用一个名为name的变量,而这个变量并没有被定义,因此抛出NameError。
内容的提问来源于stack exchange,提问作者Abhinav
相关产品推荐
相关产品推荐

