如果您只是尝试调用update
自己,而不是将其传递给FTP.storbinary
,您会立即看到问题:
>>> update('')
UnboundLocalError: local variable 'count' referenced before assignment
如果要更新全局变量,则必须显式将其标记为全局:
def update(block):
global count
count += 1
print count
请参阅常见问题解答条目为什么当变量具有值时我会收到 UnboundLocalError?以及下面的问题Python 中局部变量和全局变量的规则是什么?,以及 上的文档global
,了解更多详细信息。
解决这个问题的更好方法是编写一个类:
class FtpHandler(object):
def __init__(self):
self.count = 0
def update(self, block):
self.count += 1
print self.count
然后,要使用它,您需要构造该类的实例,并将绑定方法而不是普通函数传递给 FTP 代码。例如,而不是这个:
ftp = ftplib.FTP(...)
# ...
ftp.storbinary(spam, eggs, callback=update)
… 做这个:
myhandler = FtpHandler()
ftp = ftplib.FTP(...)
# ...
ftp.storbinary(spam, eggs, callback=myhandler.update)