我正在尝试编写一个小脚本来检查作为命令行参数传递的文件是否正确或错误地括号括起来。
我创建了一个异常来处理函数停止点,但似乎无法正确提升它。
当我在 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__()