尝试语句未按预期运行

时间:2018-12-08 18:50:40

标签: python string exception

我有三个功能,readHeader读取txt文件的标题,readExpertsFile读取文件的内容,以及exceptionNH函数比较文件名和标头,如果两者不兼容(例如,名称中的日期与标头不同),则会引发异常。
这是三个函数和一个txt示例:

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:
...
...

我的问题是,在try语句上,我希望断言将比较视为“ True”,并跳过except子句,但这没有发生。
我怀疑.lower()无法正常工作,但我不明白为什么。
如果您看到其他更好的东西,可以随时分享,因为我是python的新手,并且想提高自己。

1 个答案:

答案 0 :(得分:0)

我发现了错误。我在想,当我想从列表中的第一个元组中获取第一个元素时,我需要写list[position of item][position of tuple],而不是相反的。

按照mkrieger1的建议,我打印了fileName[10:17]readFile(fileName)[3][0].lower().replace(":", ""),第一个是好的,但是第二个没有显示第一个元组的第三项(来自readHeader),但是第三元组的第一项。
我已经从readFile(fileName)[3][0].lower().replace(":", "")更改为readFile(fileName)[0][3].lower().replace(":", ""),并且现在可以使用了,谢谢您的帮助。