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')