使用with打开多个文件时单独捕获IO错误

时间:2014-01-19 10:33:11

标签: python-3.x with-statement

我知道我可以使用with语句打开多个文件。我的问题是我无法分开捕捉错误。我的函数有一个参数和一个可选参数。如果没有给出“regular”,它应该抛出一个IOError,但是如果没有给出可选参数(一个文件),那么它应该只返回一条警告消息,并继续运行。到目前为止,我提出了这个解决方案,我的问题是,可以将这两个文件打开,如下所示:使用codecs.open(file,'r','iso-8859-2')作为f,codecs.open (stopfile,'r','iso-8859-2')并单独检查错误?

import re
import codecs

def frequencyList(file, stopfile=''):    
    try:
        with codecs.open(file, 'r', 'iso-8859-2') as f:
            text = f.read()
            frequentWords = []
            if stopfile != '':
                try:
                    with codecs.open(stopfile, 'r', 'iso-8859-2') as s:
                        for word in s:
                            frequentWords.append(word[:-2])
                except:
                    pass
    except IOError:
        return 'File not found.'    

    text = re.sub(r'\W+', ' ', text).lower().split()
    withoutFrequentWords = []    
    for word in text:
        if word not in frequentWords:
            withoutFrequentWords.append(word)            
    frequency = [withoutFrequentWords.count(word) for word in withoutFrequentWords]
    dictionary = dict(zip(withoutFrequentWords, frequency))
    result = [(dictionary[key], key) for key in dictionary]
    result.sort()
    result.reverse()    
    return result[:10]

if __name__ == '__main__':
    print(frequencyList('1984.txt', 'stopwords.txt'))

1 个答案:

答案 0 :(得分:0)

我想说,因为你希望允许没有stopfile你的代码实际上会变得更加混乱,试图打开两个文件,其中一个文件可能不存在,其中一个文件必须比目前更好,因为你会必须检查哪个文件产生了错误,如果是stopfile则禁止异常。