I'm trying to code a little script that checks whether a file passed as a command line parameter is well or badly parenthesized.
I've created an exception to handle the functions stop point but can not seem to raise it properly.
When I test the code in a Python interpreter, it seems to work (ie it recognizes it should the raise the exception, but when I test my file with the sample files I have (that are badly parenthesized), it still prints out that it was successfully checked
Do you have any ideas ?
Best,
Code :
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__()