我正在尝试从某些文件中的变量中获取值,这是代码:
path = '/opt/log/...'
word = 'somevariable'
def enumeratepaths(path=path):
paths = []
for dirpath, dirnames, files in os.walk(path):
for file in files:
fullpath = os.path.join(dirpath, file)
paths.append(fullpath)
return paths
def read_files(file):
try:
file_open = open(file, 'r')
search = file_open.read()
find = search.find(word)
find_start = find + 7
find_stop = find + 9
result = int(search[find_start:find_stop])
return int(result)
finally:
file_open.close()
def main():
for files in enumeratepaths():
read_files(files)
if __name__ == "__main__":
main()
问题是某些文件里面没有变量,因为发生了一些错误。在这种情况下,此脚本会返回错误:
result = int(search[find_start:find_stop])
ValueError: invalid literal for int(): RE
我希望将这些值设为int
,但我被卡住了。
还有一个问题:如果文件没有那个搜索值,它怎么能返回像“RE”这样的东西?
答案 0 :(得分:3)
如果find
找不到您要搜索的字符串,则返回-1。因此,您可以检查search.find(word)
的返回值,看看是否真的找到word
。
即使搜索到的单词未找到,您也可以继续操作。 find_start
最终为6,find_end
为8,可能search[6:8]
包含字符“RE”,这会导致您看到的错误消息。
答案 1 :(得分:2)
你可以这样解决:
try:
int(somestring)
except (ValueError, TypeError):
pass # not an int... what do you want to do now?
或者,如果你总是检查一个只应该是数字的字符串:
if somestring.isdigit():