python-3.x - 是否存在类似 Nonetype 路径的东西?
问题描述
在我的课程中,我喜欢使用 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
方法返回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)
推荐阅读
- android - 存储动态数据的最佳方式?
- ruby-on-rails - Rails 关注未定义的方法错误
- symfony - 如何为 Sonata Admin Block 设置角色
- java - Mapbox,Tracking 模式消耗超过 50% 的 CPU?
- push-notification - TeamDrive 通知使用 Google 管理 SDK 报告有 owner_is_team_drive 标志问题
- webforms - 报告定义具有无效的目标命名空间 ISSUE
- vue.js - 当一项有一些变化时更新vuex数组的状态
- solr - Solr 原子更新不适用于日期字段
- python - iterrows 的更快替代方案
- shell - 如何在 snappydata shell 中启用查询执行时间?