Python path.iterdir() 异常没有在 try 中执行代码?

问题描述 投票:0回答:0

在 Windows 11 中,

C:\Users\$env:username\Documents
中有您无法访问的特殊目录。 您可以使用 PowerShell 命令行列出它们:

Get-ChildItem -Path  C:\Users\$env:username\Documents -force

你会看到

...
l--hs          29/01/2023    15:32          My music -> C:\Users\****\Music
l--hs          29/01/2023    15:32          My pictures -> C:\Users\****\Pictures
l--hs          29/01/2023    15:32          My videos -> C:\Users\****\Videos
...

我不想,当捕获到一个异常时,shell 将执行代码进入 try(添加到堆栈)。

我的代码如下:

from pathlib import Path
import os
user = os.environ['USERPROFILE']  # on  windows
p = Path(user + "/Documents")
stack = [p]
execp = []
all = []
while stack:
    path = stack.pop()
    isDir = path.is_dir()
    if isDir:
        try:
            for e in path.iterdir():
                if e.is_dir():
                    stack.append(e)
                    all.append(e)
        except PermissionError:
            execp.append(path)

# is O(n)
lst3 = [x for x in all if x in execp]

# Print all the list separate with \n
print(*lst3, sep="\n")

这些特殊目录(见上文)将在

all
列表中。

注意:我必须将 try 放在 for 循环之前,否则程序会在发现 PermissionError 异常时停止。

我见过EAFP:请求宽恕比获得许可更容易。

python try-catch block execute
© www.soinside.com 2019 - 2024. All rights reserved.