我正在尝试编写一个程序,该程序具有通过查找docstring中的Author
字符串来查找和打印文件作者的函数。我已经设法获得下面的代码来打印一个文件的作者,该文件具有作者字符串,后跟作者名称以及作者字符串后面没有名称。我遇到问题的是在作者字符串根本不存在时尝试打印Unknown
,即文档字符串的任何部分都不包含Author
。
N.B。 lines
只是在文件上使用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"))
答案 0 :(得分: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
语句,因为如果有,则该函数将提前返回。
或者,因为我们将name
默认为Unknown
,您也可以使用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)