首页 > 解决方案 > 尝试语句未按预期运行

问题描述

我有三个函数,readHeaderthet 读取 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 的新手并且想提高自己。

标签: pythonstringexception

解决方案


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

按照 mkrieger1 的建议,我打印了fileName[10:17]and readFile(fileName)[3][0].lower().replace(":", ""),第一个很好,但第二个没有显示第一个元组的第三项(即 from readHeader),而是第三个元组的第一项。
我已经从readFile(fileName)[3][0].lower().replace(":", "")to更改为readFile(fileName)[0][3].lower().replace(":", "")现在可以正常工作了,谢谢您的帮助。


推荐阅读