gpt4 book ai didi

python - PathLike 对象中的 __fspath__() 函数

转载 作者:行者123 更新时间:2023-11-30 22:13:11 25 4
gpt4 key购买 nike

我正在尝试实现 PathLike 对象并使用 fspath 命令从 fspath 函数检索 o/p。

我期望的是,如果将 PathLike 对象传递给 fspath 函数,它应该返回 fspath 的值(这里它应该返回以字节为单位的路径)。然而,它仍然在 str 中返回。

import os,pathlib
class imp(os.PathLike):
def __init__(self,path):
self.path=path
def __fspath__(path):
return bytes(path)
re=imp('/etc/')
print(os.fspath(re.path))

Output: '/etc/'

Expected output : b '/etc/'

您能否告诉我哪里出了问题以及我应该如何更改代码才能使其按预期工作?

最佳答案

问题是您在 re.path 而不是 re 上调用 fspath

虽然re是一个类似路径的对象,fspath将使用__fspath__协议(protocol),re.path只是一个字符串,因此它返回未更改的字符串。

the docs说:

If str or bytes is passed in, it is returned unchanged. Otherwise __fspath__() is called and its value is returned as long as it is a str or bytes object. In all other cases, TypeErroris raised.

同时,您的 __fspath__ 在两个方面是错误的。首先,它是一个方法,它应该采用 self 并使用 self.path 执行某些操作;按原样,您将 self 作为名为 path 的变量,并尝试将其用作字符串。其次,您必须对字符串调用 encode (使用适当的编码 - 通常是 fs 编码,尽管在这种情况下您甚至不需要费心,只需返回一个字符串),不要将其传递给 bytes 构造函数。

此外,出于调试目的,如果字符串和字节完全不相关,那么发现问题会容易得多。比如说,如果 re.path'unicodepath'__fspath__ 返回 '8bitpath',那就太好了弄清楚是无视你的方法还是在背后决定事情。

关于python - PathLike 对象中的 __fspath__() 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50862400/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com