zy8818 发表于 2022-10-22 18:41:15

硬盘根目录不可访问的PermissionError: [WinError 5] 拒绝访问。: 'G:\\\\$Recycle...

硬盘根目录不可访问的PermissionError: 拒绝访问。: 'G:\\\\$Recycle...
读取G:\\根目录时发生错误
list1=os.listdir(pathName)代码在此处发生错误,原因是权限不够,
如何添加权限检测代码,跳过不可访问的文件夹
如果读c:\\ 盘里面的不可访问的文件更多,凭借字符串对比略过文件夹明显不够用
感谢高手指点

jackz007 发表于 2022-10-22 19:22:55

本帖最后由 jackz007 于 2022-10-22 19:37 编辑

      这一句
      os . listdir()
      属于风险语句,应该使用异常捕获机制,这样,在函数调用出现错误时,程序不至于直接退出。
try:
    list1=os.listdir(pathName)    # 风险语句
    语句1                                    # 如果风险语句平安度过,就会从这里继续                  
    语句2
    语句3
    ......
except:                                       #如果风险语句执行错误,就会从这里继续执行
    pass

zy8818 发表于 2022-10-22 19:37:27

jackz007 发表于 2022-10-22 19:22
这一句

      属于风险语句,应该使用异常捕获机制,这样,在函数调用出现错误时,程序不至于 ...

    list1=[]
    try:
      list1=os.listdir(pathName)
    except:
      pass

改好了一样出错
请输入路径:G:\\

    list1=os.listdir(pathName)
PermissionError: 拒绝访问。: 'G:\\\\$Recycle.Bin\\S-1-5-18'

jackz007 发表于 2022-10-22 19:40:05

zy8818 发表于 2022-10-22 19:37
list1=[]
    try:
      list1=os.listdir(pathName)


         把你的代码贴全,至少是整个递归函数的全部代码。

zy8818 发表于 2022-10-22 19:45:24

jackz007 发表于 2022-10-22 19:40
把你的代码贴全,至少是整个递归函数的全部代码。

#递归获取目录下所有文件夹路径(包括子文件夹)-》list
def getAllChildFolder(pathName):
    #print(pathName)
    list1=os.listdir(pathName)
    wenjianjiapath=[]
    listTemp=[]
    for each in list1:
      #忽略系统高级访问权限文件
      if each.upper()=="$Recycle.Bin".upper() or each.upper()=="Recovery".upper() or each.upper()=="System Volume Information".upper():
            continue
      newpath=os.path.join(pathName,each)
      if os.path.isdir(newpath)==True:
            wenjianjiapath.append(newpath)
            wenjianjiapath.extend(getAllChildFolder(newpath))
    return wenjianjiapath

jackz007 发表于 2022-10-22 19:58:42

zy8818 发表于 2022-10-22 19:45
#递归获取目录下所有文件夹路径(包括子文件夹)-》list
def getAllChildFolder(pathName):
    #print(p ...

def getAllChildFolder(pathName):
    wenjianjiapath = []
    try:
      for each in os . listdir(pathName):
            newpath = os . path . join(pathName , each)
            if os . path . isdir(newpath) :
                wenjianjiapath . append(newpath)
                wenjianjiapath . extend(getAllChildFolder(newpath))
    except:
      pass
    return wenjianjiapath

zy8818 发表于 2022-10-23 16:31:22

本帖最后由 zy8818 于 2022-10-23 16:34 编辑

jackz007 发表于 2022-10-22 19:58


非常感谢,但是我还不清楚这个try的原理
如果try..except中间代码出错时正好在for循环执行到一半的时候,
这个时候是直接return,还是继续执行未执行完的for循环
因为读取文件字节数的时候也会出错,所以肯定有卡在for循环一半的时候出错

jackz007 发表于 2022-10-23 16:40:28

zy8818 发表于 2022-10-23 16:31
非常感谢,但是我还不清楚这个try的原理
如果try..except中间代码出错时正好在for循环执行到一半的时 ...

      每个有可能导致灾难的语句都必须安排进 try ... except,让它们各自都有对应的风险管控措施,只有这样,才能保证代码顺畅执行。
页: [1]
查看完整版本: 硬盘根目录不可访问的PermissionError: [WinError 5] 拒绝访问。: 'G:\\\\$Recycle...