0

我正在尝试编写一个程序,该程序具有通过查找Author文档字符串中的字符串来查找和打印文件作者的功能。我设法得到下面的代码来打印一个文件的作者,该文件的作者字符串后跟作者姓名,并且作者字符串后面没有姓名。我遇到的问题是Unknown在作者字符串根本不存在时尝试打印,即文档字符串的任何部分都不包含Author.

NBlines只是readlines()在文件上使用构造的列表。

 def author_name(lines):
    '''Finds the authors name within the docstring'''
    for line in lines:
        if line.startswith("Author"):
            line = line.strip('\n')
            line = line.strip('\'')
            author_line = line.split(': ')
            if len(author_line[1]) >=4:   
                print("{0:21}{1}".format("Author", author_line[1])) 
            else:
                print("{0:21}{1}".format("Author", "Unknown"))
4

1 回答 1

0

如果您正在编写一个函数,则返回一个值。不要使用 print(仅用于调试)。使用return后,如果找到作者,可以提前返回:

def author_name(lines):
    '''Finds the authors name within the docstring'''
    for line in lines:
        name = 'Unknown'
        if line.startswith("Author"):
            line = line.strip('\n')
            line = line.strip('\'')
            author_line = line.split(': ')
            if len(author_line[1]) >=4:   
                name = author_line[1]
            return "{0:21}{1}".format("Author", name)  # ends the function, we found an author

    return "{0:21}{1}".format("Author", name)

print(author_name(some_docstring.splitlines()))

最后一条return语句只有在没有以 开头的行时才会执行Author,因为如果有,函数就会提前返回。

或者,因为我们默认nameUnknown,您也可以使用break提前结束循环并返回最后一行:

def author_name(lines):
    '''Finds the authors name within the docstring'''
    for line in lines:
        name = 'Unknown'
        if line.startswith("Author"):
            line = line.strip('\n')
            line = line.strip('\'')
            author_line = line.split(': ')
            if len(author_line[1]) >=4:   
                name = author_line[1]
            break  # ends the `for` loop, we found an author.

    return "{0:21}{1}".format("Author", name)
于 2013-05-30T07:46:10.053 回答