我在Windows上的python 2.7.8中遇到os.walk()
问题。
当我提供正常的'像"D:\Test\master"
这样的路径按预期工作。但是,当我向它提供UNC路径(例如"\\?\D:\Test\master"
时,它将按预期报告根目录,但它不会向下钻取到子目录,也不会引发异常。
我的研究:我在help page上读到os.walk()
接受函数参数来处理错误。默认情况下,此参数为None
,因此不会报告错误。
我传递了一个简单的函数来打印错误,并为每个目录收到以下内容。
def WalkError(Error):
raise Exception(Error)
堆栈追踪:
Traceback (most recent call last):
File "Compare.py", line 988, in StartServer
for root, dirs, files in os.walk(ROOT_DIR,True,WalkError):
File "C:\Program Files (x86)\Python2.7.8\lib\os.py", line 296, in walk
for x in walk(new_path, topdown, onerror, followlinks):
File "C:\Program Files (x86)\Python2.7.8\lib\os.py", line 281, in walk
onerror(err)
File "Compare.py", line 62, in WalkError
raise Exception(Error)
Exception: [Error 123] The filename, directory name, or volume label syntax is incorrect: '\\\\?\\D:\\Test\\master\\localization/*.*'
答案 0 :(得分:1)
原作者的回答(最初发布为问题的编辑):
即时更新:在检查\lib\os.py
的过程中,我发现错误源于os.listdir()
。我搜索了与os.listdir()
相关的上述错误消息,并找到了对我有用的this solution。
看起来如果您要使用UNC样式路径和os.
模块,他们需要进行Unix化(将\
转换为/
)。 \\\\?\\D:\\Test\\master\\
变为//?/D:/Test/master/
(注意:您不再需要逃避\
,这很方便。
这与UNC 'spec'背道而驰,因此请注意您是否正在使用其他尊重Microsoft UNC实施的模块。
(对不起自我解决方案,我打算关闭标签,但觉得这里有知识,在其他地方找不到。)