我试图编写一个小脚本,检查作为命令行参数传递的文件是否正确地插入了括号。你知道吗
我创建了一个异常来处理函数停止点,但似乎无法正确地引发它。你知道吗
当我在Python解释器中测试代码时,它似乎可以工作(即它可以识别是否会引发异常,但是当我用我拥有的示例文件(括号错误)测试我的文件时,它仍然打印出它已成功检查
你有什么想法吗?你知道吗
最好的
代码:
import sys
from stack import *
class BracketException(Exception) :
"""
Exception qui gère les problèmes de parenthesage : mauvaise parenthèse,
mauvais placement etc...
"""
def __init__(self, char, lineNumber, charNumber) :
self.char = char
self.lineNumber = lineNumber
self.charNumber = charNumber
def __str__(self) :
return(self.char + " at line " + str(self.lineNumber) + " char " + str(self.charNumber))
def checker(file) :
lineNumber = 1
charNumber = 1
stacked = Stack()
openers = ["(", "[", "{"]
closers = [")", "]", "}"]
inChannel = open(file, "r")
for line in file :
for char in line :
if char in openers :
stacked.push([char, lineNumber, charNumber])
print(stacked.top())
elif char in closers :
try :
if openers[closers.index(char)] == stacked.top()[0] :
stacked.pop()
else :
raise BracketException(char, lineNumber, charNumber)
except StackEmptyError :
raise BracketException(char, lineNumber, charNumber)
charNumber += 1
charNumber = 1
lineNumber += 1
inChannel.close()
if not stacked.is_empty() :
raise BracketException(stacked.top()[i] for i in range(3))
def __main__() :
try :
fichier = sys.argv[1]
checker(fichier)
print("it's checked !")
except BracketException as ex :
print(ex)
except IndexError :
print("Wrong number of parameters")
except Exception as e :
print(e)
if __name__ == "__main__" :
__main__()
您正在迭代给定的文件名,而不是所创建的文件句柄。文件名中可能没有不平衡的括号,因此也不例外。你知道吗
你应该换成
要确保即使抛出异常也关闭文件,这是首选的文件处理方式,请参见docs.python.org - reading and writing files
我无法测试这个(没有堆栈模块-如果需要,我使用列表),但这应该更快:
相关问题 更多 >
编程相关推荐