UnboundLocalError:在为Simbols Fixer分配Python之前引用了局部变量'X'

阿兰瓦古特(Alaenvargut)

我必须在python中为LateX做一个simbols修复程序,所以我编写了这段代码,但我不知道为什么它显示

Traceback (most recent call last):
  File "C:\Users\Stark's ProBook\Desktop\prueba.py", line 92, in <module>
    BracketFind()
  File "C:\Users\Stark's ProBook\Desktop\prueba.py", line 30, in BracketFind
    for h in archivo:
UnboundLocalError: local variable 'archivo' referenced before assignment

这是我的代码是为python 2.7

# -*- coding: cp1252 -*-

archivo = open("test.txt", "r")
texto = archivo.readlines()
archivo = "".join(texto)
Opening = 0
Closes = 0
print archivo      

def Count():
    return contador('{')-contador('}')

def contador(simbolo):
    conta = 0
    for h in archivo:
        if simbolo == h:
            conta= conta+1
    return conta

def Insert(string, index):
    return string[:index] + '.' + string[index:]

def Remove(string, index):
    return string[:index-1] + '.' + string[index+1:]

def BracketFind():

    Opening = 0
    Closes = 0
    for h in archivo:
        if '{' == h:
            Opening = Opening+1
        elif '}' ==h:
            Closes = Closes+1

    print "Abiertas ({) "+ str(Opening) + " Cerradas (}) "+str(Closes)
    Position = -1
    StartReplacing = False
    OpenPosition = -1
    while True:
        Position = -1
        StartReplacing = False
        OpenPosition = -1
        if Count() == 0:
            print "Revision exitosa!!, No existe ninguna { sin cerrar " +"Si tienes problemas de compilacion no es por esta razón. " + "Revisa tu codigo en busca de otro error"
            return True
        if contador('{') == 0 and contador('}')>0:
            break
        if contador('{') > 0 and contador('}') == 0:
            break
        for Character in archivo:
            Position = Position+1
            if Character == '{':
                OpenPosition = Position
                StartReplacing = True
            if StartReplacing:
                if Character == '}':
                    try:
                        archivo = Remove(archivo,OpenPosition)
                        archivo = Insert(archivo,OpenPosition)
                        archivo = Remove(archivo,Position)
                        archivo = Insert(archivo,Position)
                    except:
                        break
    iPos = -1
    iCount = -1
    iTarget = 0
    iType = 0

    if '{' in archivo:
        iTarget = archivo.rfind('{')
        print iTarget
        iType = 1
    elif '}' in archivo:
            iTarget = archivo.rfind('}')
            iType = 2
    if iTarget == -1:
        return True
    if iType == 1:
        print "La llave que abre (" , iTarget , ") quizas es inecesaria o parece no estar cerrada"
    elif iType == 2:
            print "La llave que cierra (" , iTarget , ") quizas es inecesaria o parece no estar cerrada"
    for Character in archivo:
        iPos = iPos+1
        if Character == '{' or Character == '}':
            iCount = iCount+1
            if(iCount == iTarget):
               print "La llave ",iCount , "Parece tener error"
    return True

print Count()
BracketFind()

您是否知道是什么原因造成的?我不明白,如果在执行开始时显示“ archivo”,为什么会显示此信息

乌龟很可爱

这与python处理范围的方式有关。最初,archivo是一个全局变量,在任何函数或类之外定义;可以从任何范围访问它。BracketFind()包括一些关于archivo的定义,即“ archivo = Remove(archivo,OpenPosition)”。这将导致archivo恢复为该功能的本地作用域;您尝试引用的全局变量不再可用。

解决此问题的最简单方法是在BracketFind()的开头附近添加“ global archivo”行,但更可靠的解决方案是重新编写代码,以便archivo不再是全局变量。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

UnboundLocalError:在Discord.py中分配之前引用了局部变量'x'

UnboundLocalError:在为一个变量赋值之前引用了局部变量“x”,而其他变量在 Python 中工作

UnboundLocalError:赋值之前引用了局部变量“ cars”

UnboundLocalError:赋值之前引用了局部变量“ e”

UnboundLocalError:在赋值之前引用了局部变量 <function>

麻烦:UnboundLocalError:赋值之前引用了局部变量

'UnboundLocalError:赋值之前引用了局部变量'lower'

UnboundLocalError:在赋值之前引用了局部变量“标签”

UnboundLocalError:在赋值之前引用了局部变量 <var>

UnboundLocalError:分配前引用了局部变量“pin”

UnboundLocalError:在Pandas中分配之前引用了局部变量“ y”

另一个UnboundLocalError:分配问题之前引用了局部变量

UnboundLocalError:在discord.py中分配之前引用了局部变量“ member_id”

Python | 如果变量:UnboundLocalError:赋值之前引用了局部变量“变量”

UnboundLocalError:在Pygame 2.0中进行赋值,向后和向前移动之前引用了局部变量'x_direction'

Python - UnboundLocalError:在赋值之前引用了局部变量“d”

UnboundLocalError:赋值之前引用了局部变量'turn'-python

为什么python显示UnboundLocalError:赋值之前引用了局部变量'w'?

关于UnboundLocalError:在Python中赋值之前引用了局部变量'font_size'

Python错误-UnboundLocalError:分配前引用了局部变量

全局变量变为局部--UnboundLocalError:赋值之前引用了局部变量

Python pygame-弹跳球(UnboundLocalError:分配前引用了局部变量'move_y')

UnboundLocalError:在进行 X 射线分类时在 PyTorch 中分配之前引用的局部变量“标签”

Keras:UnboundLocalError:赋值之前引用了局部变量“数组”,如何解决

UnboundLocalError:在赋值 fetchProcess 错误之前引用了局部变量“ext”

“UnboundLocalError:在赋值之前引用了局部变量‘正在运行’”Idk 为什么

UnboundLocalError:在赋值之前引用了局部变量“file1”,请帮助修复

UnboundLocalError:分配前引用了局部变量“用户名”

UnboundLocalError:赋值前引用了局部变量“readlgt”