简体   繁体   中英

Try statement not running as I expect

I have three functions, the readHeader thet reads the header of the a txt file, readExpertsFile that reads the contents of the file and the exceptionNH function that compares the file name and header and raises an exception if the two are not compatible (eg if the date in the name is not the same as the header).
Here are the three functions and a txt example:

def readHeader(fileName):
    fileIn = open(fileName, "r")

    fileIn.readline()
    day = fileIn.readline().replace("\n", "")
    fileIn.readline()
    time = fileIn.readline().replace("\n", "")
    fileIn.readline()
    company = fileIn.readline().replace("\n", "")
    scope = fileIn.readline().replace(":", "").replace("\n", "")

    fileIn.close()

    return (day, time, company, scope)


def readFile(fileName):
    expertsList = []

    expertsList.append(readHeader(fileName))

    fileIn = open(fileName, "r")

    for line_counter in range(LNHEADER):
        fileIn.readline()

    fileInE.close()

    return expertsList


def exceptionNH(fileName):
    try:
        assert fileName[10:17] == readFile(fileName)[3][0].lower().replace(":", "")
    except AssertionError:
        print("Error in input file: inconsistent name and header in file", fileName,".")
        exit()

fileName = "file.txt"
exceptionNH("2018y03m28experts10h30.txt")

2018y03m28experts10h30.txt:

Day:
2018-03-28
Time:
10:30
Company:
XXX
Experts:
...
...

My problem here is that on the try statement I expect the assert "sees" the comparation as True and skip the except clause but this is not happening.
I suspect that the .lower() is not working but I can't understand why.
If you see other things that could be better feel free to share, as I'm a new at python and want to improve myself.

I've found the error. I was thinking that when I want to get the first element from the first tuple inside a list, I would need to write list[position of item][position of tuple] , instead of it's inverse.

Following the mkrieger1's advice, I printed fileName[10:17] and readFile(fileName)[3][0].lower().replace(":", "") , the first was good but the second was not showing the third item of the first tuple (that's from readHeader ) but the first item of the third tuple.
I've changed from readFile(fileName)[3][0].lower().replace(":", "") to readFile(fileName)[0][3].lower().replace(":", "") and it's working now, thank you for the help.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM