这是我的问题:
savedFileSize = 0
savedFileCount = 0
SUBFOLDER = False
def saveFile(path, filename):
global savedFileSize
global savedFileCount
filepath = os.path.join(path, filename)
if SUBFOLDER:
try:
subpath = os.path.join(SAVEPATH, path.split("\\", 1)[1])
if not os.path.exists(subpath):
os.makedirs(subpath)
shutil.copy(filepath, subpath)
savedFileCount += 1
savedFileSize += os.path.getsize(filepath)/(1024*1024)
except BaseException as e:
logging.exception(e)
else:
try:
shutil.copy(filepath, SAVEPATH)
savedFileCount += 1
savedFileSize += os.path.getsize(filepath)/(1024*1024)
except BaseException as e:
logging.exception(e)
我在分配之前得到了“局部变量'savedFileCount'”,整个时间都是错误的。 但变量SUBFOLDER没有任何问题。 saveFileSize变量也可以正常工作。
答案 0 :(得分:1)
我很高兴删除你的pyc文件解决了你的问题。但是,您的代码实际上并没有调用全局变量。在大多数情况下,(可避免的)使用全局变量表示设计不太好,可能会导致各种问题,包括姓名冲突等。
您可以轻松地重构您的代码而不使用全局变量:
def saveFile(path, filename):
savedFileCount, savedFileSize = 0, 0
filepath = os.path.join(path, filename)
if SUBFOLDER:
try:
subpath = os.path.join(SAVEPATH, path.split("\\", 1)[1])
if not os.path.exists(subpath):
os.makedirs(subpath)
shutil.copy(filepath, subpath)
savedFileCount = 1
savedFileSize = os.path.getsize(filepath)/(1024*1024)
except BaseException as e:
logging.exception(e)
else:
try:
shutil.copy(filepath, SAVEPATH)
savedFileCount = 1
savedFileSize += os.path.getsize(filepath)/(1024*1024)
except BaseException as e:
logging.exception(e)
return savedFileCount, savedFileSize
然后在你的通话范围内:
totalCount, totalSize = 0
for path, filename in tobesaved:
count, size = saveFile(path, filename)
totalCount += count
totalSize += size