5

我在 Python 中(至少在 2.6.1 中)遇到了该bytearray.fromhex函数的错误。如果您尝试使用文档字符串中的示例,会发生这种情况:

>>> bytearray.fromhex('B9 01EF')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: fromhex() argument 1 must be unicode, not str

此示例在 Python 2.7 中运行良好,我想知道解决该问题的最佳编码方式。我不想总是转换为 unicode,因为它会影响性能,并且测试正在使用的 Python 版本感觉不对。

那么有没有更好的方法来解决这类问题,以便它适用于所有版本,最好不会降低工作 Python 的速度?

4

2 回答 2

8

对于这样的情况,最好记住try如果没有抛出异常,一个块是非常便宜的。所以我会使用:

try:
    x = bytearray.fromhex(some_str)
except TypeError:
    # Work-around for Python 2.6 bug 
    x = bytearray.fromhex(unicode(some_str))

这让 Python 2.6 的性能损失很小,但 2.7 根本不应该受到影响。这当然比明确检查 Python 版本更可取!

这个错误本身(它确实似乎是一个)仍然存在于 Python 2.6.5 中,但我在bugs.python.org上找不到任何提及它的内容,所以它可能在 2.7 中被意外修复了!它看起来像是一个在 2.6 中未正确测试的向后移植的 Python 3 功能。

于 2010-09-08T18:31:54.553 回答
3

您还可以根据需要创建自己的函数来完成工作:

def my_fromhex(s):
    return bytearray.fromhex(s)

try:
    my_fromhex('hello')
except TypeError:
    def my_fromhex(s):
        return bytearray.fromhex(unicode(s))

然后my_fromhex在您的代码中使用。这样,异常只发生一次,并且在您的运行时,使用正确的函数而无需过多的 unicode 转换或异常机制。

于 2010-09-08T19:40:38.347 回答