我有一个循环运行的python程序来计算存储桶中的密钥数量,它有一个或多个密钥时工作正常。 当它有0个对象时会抛出错误。
def CdmCount(Destbucket):
global key
totalcdms = 0
for key in Destbucket.get_all_keys():
totalcdms += 1
print totalcdms
assert isinstance (key,object )
return (totalcdms, key)
我看到以下错误:
File "check_fun.py", line 24, in CdmCount
return (totalcdms, key)
NameError: global name 'key' is not defined
完整代码http://pastebin.com/QrAwL4Dq
更新:
我添加了一个上层boto函数来列出存在的键数,如果它是零退出。
keys = list(Destbucket.list())
if not keys:
print "List is empty"
sys.exit(2)
这是一个好方法吗?
答案 0 :(得分:0)
您的代码已到达assert
语句,而值尚未分配给key
,因此未定义。此处不使用全局变量也会触发错误(UnboundLocalError: local variable 'key' referenced before assignment
)。
在这里使用全局变量似乎不合理,你应该考虑使用函数返回值。
此外,使用具有相同名称的多个变量也是不好的做法。在这种情况下,您定义global key
,然后再次重新定义key
作为循环中的迭代变量。这样的事情会更好:
global key
for k in keys:
if some_condition == k:
key = k
...