在 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 异常时停止。