我的代码期望 str
但将按以下方式处理传递 bytes
的情况:
if isinstance(data, bytes):
data = data.decode()
不幸的是,这在 bytearray
的情况下不起作用。是否有更通用的方法来测试对象是 bytes
还是 bytearray
,还是我应该检查两者? hasattr('decode')
是否如我所想的那样糟糕?
原文由 A. Wilcox 发布,翻译遵循 CC BY-SA 4.0 许可协议
您可以在此处使用几种方法。
鸭子打字
由于 Python 是 duck typed ,您可以简单地执行以下操作(这似乎是通常建议的方式):
但是,您可以按照您的描述使用
hasattr
,这可能没问题。当然,这是假设给定对象的.decode()
方法返回一个字符串,并且没有讨厌的副作用。我个人推荐异常或
hasattr
方法,但无论你使用什么都取决于你。使用 str()
这种方法不常见,但有可能:
其他编码是允许的,就像缓冲区协议的
.decode()
。您还可以传递第三个参数来指定错误处理。单分派通用函数 (Python 3.4+)
Python 3.4 及更高版本通过 functools.singledispatch 包含一个称为单分派通用函数的漂亮功能。这有点冗长,但也更明确:
如果您愿意,也可以为
bytearray
和bytes
对象创建特殊处理程序。当心:单分派函数仅适用于第一个参数!这是一个有意的功能,请参阅 PEP 433 。