Python中提示文件名的最佳方法是什么,以便将任何内容传递给可以作为文件打开的函数是可以接受的?
尤其是通过 Pathlib 找到的字符串和文件。
def myfunc(filename: str) -> None:
with open(filename) as f1:
# do something here
Python中提示文件名的最佳方法是什么,以便将任何内容传递给可以作为文件打开的函数是可以接受的?
尤其是通过 Pathlib 找到的字符串和文件。
def myfunc(filename: str) -> None:
with open(filename) as f1:
# do something here
我认为您正在寻找的是尚不支持的结构类型。它在PEP 544中提出。
同时,您可以通过使用注释来完成一半的工作Union[str, bytes, os.PathLike]
。
PEP 519建议使用typing.Union[str, bytes, os.PathLike]
正如埃里克所说,
PEP 519建议使用
typing.Union[str, bytes, os.PathLike]
.
这是最简单的选择。
但你也应该考虑_typeshed.AnyPath
:它支持不同版本的各种路径,它是文件名内置库中的默认输入提示,例如在函数open()
本身中。导入它会导致您的类型助手识别输入应该是文件名,并且可能有助于键入提示路径。它也有仅适用于字符串和仅适用于字节_typeshed.StrPath
串的变体。这里为他们的定义。_typeshed.BytesPath
但是,您不能只导入typeshed
模块,因为它在运行时不存在。最简单的解决方案是仅在类型检查期间导入它(因为这是您唯一需要它的时间):
from typing import TYPE_CHECKING
AnyPath = None
if TYPE_CHECKING:
from _typeshed import AnyPath
最后,在当前的 3.10 beta 版本中,AnyPath
已重命名为 StrOrBytesPath
,以便将字符串和字节字符串与 Path 模块的路径分开,并且很快不会看到另一个 AnyPath。所以,如果你打算只输入 str 文件名,你可以使用_typeshed.StrPath
,或者干脆放弃使用typing.Union[str, bytes, os.PathLike]
.