Python基于os库的文件管理程序非存在文件名输入错误恢复如何实现?
问题解答
列表匹配思路可行性
该思路完全可行,你之前的实现失败是因为代码存在3个可修复的问题:
- 你调用的
listCurrentDir()函数仅负责打印目录下的文件,没有返回列表值,所以fileList变量实际被赋值为None,永远无法匹配到输入的文件名 viewFile()函数内部没有写循环逻辑,直接使用break语句会触发语法错误- 缺少输入错误后重新请求用户输入的循环逻辑
列表匹配思路修复代码
你可以先修改listCurrentDir()函数让它支持返回文件列表,再调整viewFile()的逻辑,示例代码如下:
# 先修改listCurrentDir,支持返回文件列表 def listCurrentDir(dirName): """返回目录下的文件列表,同时打印内容""" lyst = os.listdir(dirName) for element in lyst: print(element) return lyst # 修改后的viewFile逻辑 def viewFile(): fileList = listCurrentDir(os.getcwd()) while True: fname = input("Enter Filename: ") if fname not in fileList: print("Error: Filename does not exist, please re-enter.") else: with open(fname, 'r') as f: contents = f.read() print(contents, "\n") break
更优实现方案:异常捕获
不需要提前遍历目录生成列表,直接通过try-except捕获文件不存在的异常即可,该方案性能更好(无需遍历整个目录,尤其适合文件数量多的场景),还能同时处理文件无读取权限、路径错误等其他异常:
def viewFile(): listCurrentDir(os.getcwd()) while True: fname = input("Enter Filename: ") try: with open(fname, 'r') as f: contents = f.read() print(contents, "\n") break except FileNotFoundError: print("Error: Filename does not exist, please re-enter.") except PermissionError: print("Error: No permission to read this file, please re-enter.")
内容的提问来源于stack exchange,提问作者Eager to Learn
相关产品推荐
相关产品推荐

