我是Python新手,在StackOverflow的帮助下,我编写了一个程序:
1)查找给定目录,并查找该目录中的每个文件:
2)运行HTML清理程序,其中包括:
它运行得非常好,除非它遇到某种类型的文件内容,这会抛出一堆BeautifulSoup错误并中止整个事情。我希望它能够强大,因为我无法控制此目录中的内容。
所以,我的问题是:如何重新构建程序,以便当它在目录中的一个文件上出错时,它会报告它无法处理该文件,然后继续运行剩下的文件?
到目前为止,这是我的代码(删除了无关的细节):
def clean_dir(directory):
os.chdir(directory)
for filename in os.listdir(directory):
clean_file(filename)
def clean_file(filename):
tag_black_list = ['iframe', 'script']
tag_white_list = ['p', 'div']
attr_white_list = {'*': ['title']}
with open(filename, 'r') as fhandle:
text = BeautifulSoup(fhandle)
text.encode("utf-8")
print "Opened "+ filename
# Step one, with BeautifulSoup: Remove tags in tag_black_list, destroy contents.
[s.decompose() for s in text(tag_black_list)]
pretty = (text.prettify())
print "Prettified"
# Step two, with Bleach: Remove tags and attributes not in whitelists, leave tag contents.
cleaned = bleach.clean(pretty, strip="TRUE", attributes=attr_white_list, tags=tag_white_list)
fout = open("../posts-cleaned/"+filename, "w")
fout.write(cleaned.encode("utf-8"))
fout.close()
print "Saved " + filename +" in /posts-cleaned"
print "Done"
clean_dir("../posts/")
我正在寻找有关如何编写此内容的任何指导,以便在clean_file函数中遇到解析/编码/内容/属性/ etc错误后继续运行。
答案 0 :(得分:3)
您可以使用以下方式处理错误: try-except-finally
答案 1 :(得分:1)
您可以在clean_file
或for循环中执行错误处理。
for filename in os.listdir(directory):
try:
clean_file(filename)
except:
print "Error processing file %s" % filename
如果您知道引发了什么异常,则可以使用更具体的捕获。