Python: 使用try和except判断文件路径是否存在
我有一个脚本,它会递归地搜索源代码中的模块,以便找到所有需要的文件。
我正在处理的文件结构比较规律,所以我可以做一个“最佳猜测”,来找到这个新模块的正确路径。不过,这个文件路径有时候会有例外,所以不一定总是能找到正确的结果。
我尝试使用“尝试捕获”(try catch)来确认每个源文件中的模块,看看在这个路径下是否真的有文件。如果这个路径下没有文件,它会再试一次新的路径。如果模块还是找不到,就会把这个错误的路径从模块数组中删除,跳过它。
我想在递归完成后,打印出所有正确的文件路径,并标记出那些找不到的文件路径。
我的Python代码如下:
modules = ["../pathsource1.c", "../path/source2.c"]
for module in modules:
try:
with open(module, 'r') as f:
for line in f:
# search each line for keyword to see if there is a file
if(module_name):
modules.append(path_to_module + module_name)
except:
print("path did not lead to a module.")
try:
with open(new_module_path, 'r') as f:
print("module found!")
modules.append(new_module_path)
except:
print("module not found at any location")
modules.remove(module) # remove old path, which was broken
print(modules) # should return only paths that exist
expected output:
["../path/source1.c", "../path/source2.c", "../path/module1_in_source1.c", "path/module2_in_source1.c", "../path/module1_in_module2_in_source1.c", ...]
这个代码运行得还不错,但并不完美。有时候代码没有抛出异常,导致错误的路径仍然留在模块数组里。我该如何改进这个代码呢?
1 个回答
0
你可能需要多解释一下。你为什么要等着捕捉异常呢?我猜你是想处理一个叫做 FileNotFoundError
的错误。一般来说,最好只捕捉你想处理的那个特定错误。否则,可能会出现其他和文件找不到无关的错误。
你可以使用操作系统模块中的 os.path.exists()
来检查一个路径是否存在。
导致你出错的另一个问题可能是你在遍历列表的同时还在修改它。也就是说,当你从列表中删除一个元素时,列表的索引会更新,这样你当前要处理的元素就变成了下一个元素。因此,在你删除元素后的下一次循环中,你实际上会跳过一个元素,因为列表已经被更新了。我建议你创建一个新的列表,里面放有效的路径,而不是在你正在遍历的那个列表中删除元素。