我正在python中创建一个新的嵌套目录(data_dir = 'parent\child'
)
try:
os.mkdir(data_dir)
except WindowsError:
pass
如果父目录'parent'
不存在(但是,因为可能稍后在代码中进行设置),则代码将其捕获为Windows Error 3
并继续前进。
但是现在Windows Error 206
也可能发生,这是文件名或扩展名太长的时候。为此,我需要采取单独的措施。
是否有一种方法可以区分Windows Error
3
和206
(以及其他),从而产生独特的Exceptions
?
答案 0 :(得分:2)
您可以使用WindowsError.winerror
(从 OSError 继承:[Python 3]: winerror)来区分基本错误。像这样:
>>> def create_dir(path): ... try: ... os.mkdir(path) ... except WindowsError as e: ... if e.winerror == 3: ... print("Handling WindowsError 3") ... elif e.winerror == 206: ... print("Handling WindowsError 206") ... else: ... print("Handling other WindowsError") ... except: ... print("Handling other exceptions") ... >>> >>> create_dir("not/existing") Handling WindowsError 3 >>> create_dir("a" * 228) Handling WindowsError 206 >>> create_dir(":") Handling other WindowsError
当然,使用[Python 3]: os.makedirs(name, mode=0o777, exist_ok=False)可以轻松避免 WindowsError 3 。
答案 1 :(得分:0)
除了CristiFati-s解决方案之外,避免幻数的更好方法是使用pywin32模块的winerror:
import winerror
try:
os.mkdir(path)
except WindowsError as e:
if e.winerror == winerror.ERROR_PATH_NOT_FOUND:
print("Handling WindowsError 3")
elif e.winerror == winerror.ERROR_FILENAME_EXCED_RANGE:
print("Handling WindowsError 206")
else:
print("Handling other WindowsError")
except:
print("Handling other exceptions")