我要用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
这是我为Python2.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不再是全局变量。在
相关问题 更多 >
编程相关推荐