3 回答

TA貢獻1827條經驗 獲得超8個贊
正如埃里克所說,
PEP 519建議使用typing.Union[str, bytes, os.PathLike].
這是最簡單的選擇。
但是你也應該考慮_typeshed.AnyPath:它支持根據不同版本的各種路徑,并且它是內置文件名庫中的默認鍵入提示,例如在函數open()本身中。導入它會導致您的類型助手識別輸入應該是文件名,并且可能有助于輸入提示路徑。它還具有_typeshed.StrPath僅_typeshed.BytesPath適用于字符串和僅適用于字節(jié)串的變體。這里為他們的定義。
但是,您不能只導入typeshed模塊,因為它在運行時不存在。最簡單的解決方案是僅在類型檢查期間導入它(因為這是您唯一需要它的時候):
from typing import TYPE_CHECKING
AnyPath = None
if TYPE_CHECKING:
from _typeshed import AnyPath
最后,在當前的 3.10 beta 版本中,AnyPath 已重命名為 StrOrBytesPath,以便將字符串和字節(jié)串與 Path 模塊的路徑分開,并且不會很快看到另一個 AnyPath。因此,如果您打算僅輸入 str 文件名,則可以使用_typeshed.StrPath,或者只是放棄并使用typing.Union[str, bytes, os.PathLike].
添加回答
舉報