为了账号安全,请及时绑定邮箱和手机立即绑定

如何在函数中键入提示文件名?

如何在函数中键入提示文件名?

慕运维8079593 2021-08-24 17:27:13
Python 中提示文件名的最佳方法是什么,以便将任何内容传递给您可以作为文件打开的函数?尤其是通过 Pathlib 找到的字符串和文件。def myfunc(filename: str) -> None:    with open(filename) as f1:        # do something here
查看完整描述

3 回答

?
红颜莎娜

TA贡献1842条经验 获得超12个赞

我认为您正在寻找的是结构类型,目前尚不支持。它在PEP 544 中提出。

同时,您可以通过使用Union[str, bytes, os.PathLike].


查看完整回答
反对 回复 2021-08-24
?
GCT1015

TA贡献1827条经验 获得超4个赞

PEP 519建议使用typing.Union[str, bytes, os.PathLike]


查看完整回答
反对 回复 2021-08-24
?
斯蒂芬大帝

TA贡献1827条经验 获得超8个赞

正如埃里克所说,


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].


查看完整回答
反对 回复 2021-08-24
  • 3 回答
  • 0 关注
  • 190 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信