在Python中将文件中的变量转换为int()时出错

时间:2011-03-21 18:36:27

标签: python

我正在尝试从某些文件中的变量中获取值,这是代码:

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”这样的东西?

2 个答案:

答案 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():