如何测试对象是否是 pathlib 路径?
How to test if object is a pathlib path?
我想测试 obj
是否是 pathlib
路径,并意识到条件 type(obj) is pathlib.PosixPath
将是 False
对于 [=22= 上生成的路径]机.
因此问题是,有没有一种方法可以测试对象是否为 pathlib 路径(任何可能的 Path
、PosixPath
、WindowsPath
或 Pure...
-类似物)而不明确检查所有 6 个版本?
是的,使用 isinstance()
。一些示例代码:
# Python 3.4+
import pathlib
path = pathlib.Path("foo/test.txt")
# path = pathlib.PureWindowsPath(r'C:\foo\file.txt')
# checks if the variable is any instance of pathlib
if isinstance(path, pathlib.PurePath):
print("It's pathlib!")
# No PurePath
if isinstance(path, pathlib.Path):
print("No Pure path found here")
if isinstance(path, pathlib.WindowsPath):
print("We're on Windows")
elif isinstance(path, pathlib.PosixPath):
print("We're on Linux / Mac")
# PurePath
else:
print("We're a Pure path")
为什么 isinstance(path, pathlib.PurePath)
适用于所有类型?看看这张图:
我们看到 PurePath
在顶部,这意味着其他所有东西都是它的子类。因此,我们只需要检查这一项。
Path
检查非纯路径的相同推理。
Bonus:您可以在 isinstance(path, (pathlib.WindowsPath, pathlib.PosixPath))
中使用元组一次检查 2 种类型。
我喜欢 NumesSanguis 的回答,这就是我使用所学知识的方式:
def check_path_instance(obj: object, name: str) -> pathlib.Path:
""" Check path instance type then convert and return
:param obj: object to check and convert
:param name: name of the object to check (apparently there is no sane way to get the name of the variable)
:return: pathlib.Path of the object else exit the programe with critical error
"""
if isinstance(obj, (pathlib.WindowsPath, pathlib.PosixPath)):
return pathlib.Path(obj)
else:
if isinstance(obj, str):
return pathlib.Path(str(obj))
else:
logging.critical(
f'{name} type is: {type(obj)}, not pathlib.WindowsPath or pathlib.PosixPath or str')
)
sys.exit(1)
我想测试 obj
是否是 pathlib
路径,并意识到条件 type(obj) is pathlib.PosixPath
将是 False
对于 [=22= 上生成的路径]机.
因此问题是,有没有一种方法可以测试对象是否为 pathlib 路径(任何可能的 Path
、PosixPath
、WindowsPath
或 Pure...
-类似物)而不明确检查所有 6 个版本?
是的,使用 isinstance()
。一些示例代码:
# Python 3.4+
import pathlib
path = pathlib.Path("foo/test.txt")
# path = pathlib.PureWindowsPath(r'C:\foo\file.txt')
# checks if the variable is any instance of pathlib
if isinstance(path, pathlib.PurePath):
print("It's pathlib!")
# No PurePath
if isinstance(path, pathlib.Path):
print("No Pure path found here")
if isinstance(path, pathlib.WindowsPath):
print("We're on Windows")
elif isinstance(path, pathlib.PosixPath):
print("We're on Linux / Mac")
# PurePath
else:
print("We're a Pure path")
为什么 isinstance(path, pathlib.PurePath)
适用于所有类型?看看这张图:
我们看到 PurePath
在顶部,这意味着其他所有东西都是它的子类。因此,我们只需要检查这一项。
Path
检查非纯路径的相同推理。
Bonus:您可以在 isinstance(path, (pathlib.WindowsPath, pathlib.PosixPath))
中使用元组一次检查 2 种类型。
我喜欢 NumesSanguis 的回答,这就是我使用所学知识的方式:
def check_path_instance(obj: object, name: str) -> pathlib.Path:
""" Check path instance type then convert and return
:param obj: object to check and convert
:param name: name of the object to check (apparently there is no sane way to get the name of the variable)
:return: pathlib.Path of the object else exit the programe with critical error
"""
if isinstance(obj, (pathlib.WindowsPath, pathlib.PosixPath)):
return pathlib.Path(obj)
else:
if isinstance(obj, str):
return pathlib.Path(str(obj))
else:
logging.critical(
f'{name} type is: {type(obj)}, not pathlib.WindowsPath or pathlib.PosixPath or str')
)
sys.exit(1)