为什么PyCharm在下面的代码中警告我关于Redeclared 'do_once' defined above without usage
的问题?(警告在第3行)
for filename in glob.glob(os.path.join(path, '*.'+filetype)):
with open(filename, "r", encoding="utf-8") as file:
do_once = 0
for line in file:
if 'this_text' in line:
if do_once == 0:
//do stuff
do_once = 1
//some other stuff because of 'this text'
elif 'that_text' in line and do_once == 0:
//do stuff
do_once = 1
因为我想让它为每个文件做一次,所以每次打开一个新文件时都有它似乎是合适的,它确实像我希望的那样工作,但因为我没有研究过Python,只是通过做和谷歌搜索学习了一些东西,我想知道为什么它给我一个警告,我应该做什么不同。
编辑:尝试使用布尔值,但仍收到警告:
为我重现警告的短代码:
import os
import glob
path = 'path'
for filename in glob.glob(os.path.join(path, '*.txt')):
with open(filename, "r", encoding="utf-8") as ins:
do_once = False
for line in ins:
if "this" in line:
print("this")
elif "something_else" in line and do_once == False:
do_once = True
3条答案
按热度按时间j1dl9f461#
为了解决一般情况:
"你可能在做的事"
"你能做什么"
eivgtgni2#
我猜PyCharm会被使用整数作为标志所迷惑,在您的用例中可以使用几种替代方法。
使用布尔标志而不是整数
一个更好的方法是跳转简单地停止,一旦你处理了文件中的东西,例如:
e4yzc0pl3#
不算是答案,但也许是个解释:
很显然PyCharm试图避免类似
但是,它也标记了 * 正常 * 代码,如OP:
或者类似于
last_message
被重新分配,但没有在中间使用它。因此,对于发生这种情况的每种情况,解决方法都是不同的:
1.忽略警告
1.设置值后,在某处打印或记录值
1.可能创建一个函数来调用设置/检索值
1.确定是否有替代方法来实现预期结果
我的代码使用的是
last_message
示例,我只是删除了每种情况下重新分配last_message
的代码(尽管在每次重新分配后打印也删除了警告)。我使用它进行测试以定位问题,所以它并不重要。如果我想记录完成的操作,我可能会使用一个函数来完成,而不是每次都重新分配变量。如果我找到一种方法来关闭它或避免PyCharm中的警告,我会更新这个答案。