我在使用某个功能时遇到了一些问题。它是由Id
标识的书写笔记程序的一部分。注释保存在txt文件中,结构为:
Open
Id
Title
Message
Close
此函数用于查找Id
,在文件中获取其行号,然后通过将其复制到临时文件中将其删除。我遇到了失败:linea_buscada
变量我们在此行中分配之前使用过:
linea == linea_buscada-1
我错过了什么?是"与"创建一个新命名空间?如果这是问题所在,实现目标的最佳方法是什么?我正在考虑一个全局变量或列表追加,但它们对于存储一个整数来说似乎太奇怪了。感谢您的帮助。
@staticmethod
def eliminar_nota(ID = None):
ID = str(ID) or input('ID?: ')
linea = 1
try:
with open('temp.txt', 'x+') as archivo_temporal:
with open("notas.txt", "r") as archivo_notas:
for line in archivo_notas:
linea += 1
archivo_temporal.write(line)
if ID in line:
linea_buscada = linea
os.remove("notas.txt")
archivo_temporal.seek(0,0)
with open("notas.txt", "w") as archivo_notas:
linea = 1
counting = False
for line in archivo_temporal:
linea += 1
if linea == linea_buscada - 1:
counting = 5
if not counting:
archivo_notas.write(line)
else:
counting -= 1
continue
finally:
os.remove('temp.txt')
答案 0 :(得分:0)
您没有在任何地方定义linea_buscada
。你需要以某种方式初始化它:
linea_buscada = 100 # Where '100' should really be the number of lines you're dealing with.
解释此行时:
if linea == linea_buscada - 1:
它会尝试在'中替换。 linea_buscada
的值。然后它将该值减1,并测试它是否等于linea
。但是,linea_buscada
没有设置任何值,因此这种解释不会发生,并且您将看到失败。
在您的计划中,您有以下内容:
if ID in line:
linea_buscada = linea
但是,如果测试ID in line
失败(即返回false
),则无法在此处设置linea_buscada
。在with open("notas.txt", "w")
之前,您需要确保设置linea_buscada
:
if linea_buscada is not null:
# Continue with the program
答案 1 :(得分:0)
看起来linea_buscada一定不能初始化:
if ID in line:
linea_buscada = linea
否则它将被指定一个失败点的值。我会添加一些打印语句来检查它是否正在设置。没有你的输入文件,我无法检查自己。
如果下面的代码失败,则问题在于第一组嵌套的语句设置了linea_buscada。
e.g:
@staticmethod
def eliminar_nota(ID = None):
ID = str(ID) or input('ID?: ')
linea = 1
try:
with open('temp.txt', 'x+') as archivo_temporal:
with open("notas.txt", "r") as archivo_notas:
for line in archivo_notas:
linea += 1
archivo_temporal.write(line)
if ID in line:
linea_buscada = linea
print(linea_buscada)
print('Si no veo nada antes aqui, hay problemas ;)')
os.remove("notas.txt")
archivo_temporal.seek(0,0)
with open("notas.txt", "w") as archivo_notas:
linea = 1
counting = False
for line in archivo_temporal:
linea += 1
if linea == linea_buscada - 1:
counting = 5
if not counting:
archivo_notas.write(line)
else:
counting -= 1
continue
finally:
os.remove('temp.txt')