Python 赋值后变量出错?
我在函数方面遇到了一些问题。它是用于编写注释的程序的一部分,由Python 赋值后变量出错?,python,function,python-3.x,namespaces,Python,Function,Python 3.x,Namespaces,我在函数方面遇到了一些问题。它是用于编写注释的程序的一部分,由Id标识。注释保存在txt文件中,其结构如下: Open Id Title Message Close 此函数用于查找Id,获取文件中的行号,然后将其复制到临时文件中删除。我遇到了一个故障:linea_buscada变量us在此行赋值之前使用: linea == linea_buscada-1 我错过了什么?“with”是否创建新的命名空间?如果这就是问题所在,那么实现我的目标的最佳方式是什么?我正在考虑一个全局变量或列表追加,但
Id
标识。注释保存在txt文件中,其结构如下:
Open
Id
Title
Message
Close
此函数用于查找Id
,获取文件中的行号,然后将其复制到临时文件中删除。我遇到了一个故障:linea_buscada
变量us在此行赋值之前使用:
linea == linea_buscada-1
我错过了什么?“with”是否创建新的命名空间?如果这就是问题所在,那么实现我的目标的最佳方式是什么?我正在考虑一个全局变量或列表追加,但这两个变量似乎都太奇怪了,不能只存储一个整数。提前谢谢你的帮助
@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')
您没有在任何地方定义
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的值。然后,它将该值减一,并测试它是否等于linea
。但是,linea_buscada
未设置任何值,因此无法进行此解释,您将看到失败
在程序的前面部分,您有以下内容:
if ID in line:
linea_buscada = linea
但是,如果第行中的测试ID失败(即返回false
),则无法在此处设置linea\u buscada
。在打开(“notas.txt”,“w”)
之前,您需要确保设置了linea_buscada
:
if linea_buscada is not null:
# Continue with the program
看起来linea_buscada不得在以下文件中进行初始化:
if ID in line:
linea_buscada = linea
否则,故障点会为其分配一个值。我会添加一些打印语句来检查它是否被设置。没有你的输入文件,我无法检查自己
如果下面的代码失败,问题在于设置linea_buscada的第一组嵌套with语句
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')