存在类似 Nonetype 路径的东西吗?
Exists something like a Nonetype path?
在我的 类 中,我喜欢用 None 启动我的路径变量。如果我使用 os.path
很容易与其他路径进行比较。但我更喜欢pathlib风格。
是否有解决方案:
import os
path1 = os.path.dirname('D\test\file.py')
path2 = None
if path1 == path2:
print('OK')
使用路径库?
我的尝试是这样的:
from pathlib import Path
test1 = Path('D/test/file.py')
test2 = Path(None)
if test1.resolve() == test2.resolve():
print('ok')
但这不起作用,因为 Path()
不接受 None
并且 None
没有方法 resolve()
你可以给自己一个哨兵,它的 resolve
方法 returns None
做你的检查。
示例:
from pathlib import Path
# You can use type to quickly create a throwaway class with a resolve method
NonePath = type('NonePath', (), {'resolve': lambda: None})
test1 = Path('D/test/file.py')
test2 = NonePath
if test1.resolve() == test2.resolve():
print('ok')
elif test2.resolve() is None: # returning None allows you to do your check
print('test2 is NonePath')
您可以更进一步,将 __dict__
从 Path
中拉出来,并与 None
交换所有方法和属性,但这似乎有点过分了。
免责声明:这可能是个坏主意
from pathlib import Path
# this changes all methods to return None
# and sets all attributes to None
# if they aren't dunder methods or attributes
path_dict = {k: lambda: None if callable(v) else None
for k, v in Path.__dict__.items()
if not k.startswith('__')}
NonePath = type('NonePath', (), path_dict)
在我的 类 中,我喜欢用 None 启动我的路径变量。如果我使用 os.path
很容易与其他路径进行比较。但我更喜欢pathlib风格。
是否有解决方案:
import os
path1 = os.path.dirname('D\test\file.py')
path2 = None
if path1 == path2:
print('OK')
使用路径库?
我的尝试是这样的:
from pathlib import Path
test1 = Path('D/test/file.py')
test2 = Path(None)
if test1.resolve() == test2.resolve():
print('ok')
但这不起作用,因为 Path()
不接受 None
并且 None
没有方法 resolve()
你可以给自己一个哨兵,它的 resolve
方法 returns None
做你的检查。
示例:
from pathlib import Path
# You can use type to quickly create a throwaway class with a resolve method
NonePath = type('NonePath', (), {'resolve': lambda: None})
test1 = Path('D/test/file.py')
test2 = NonePath
if test1.resolve() == test2.resolve():
print('ok')
elif test2.resolve() is None: # returning None allows you to do your check
print('test2 is NonePath')
您可以更进一步,将 __dict__
从 Path
中拉出来,并与 None
交换所有方法和属性,但这似乎有点过分了。
免责声明:这可能是个坏主意
from pathlib import Path
# this changes all methods to return None
# and sets all attributes to None
# if they aren't dunder methods or attributes
path_dict = {k: lambda: None if callable(v) else None
for k, v in Path.__dict__.items()
if not k.startswith('__')}
NonePath = type('NonePath', (), path_dict)