我在Python中遇到了一个错误(至少在2.6.1中) bytearray.fromhex 功能。如果您尝试从docstring尝试示例:

>>> 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版本的测试感到错误。

因此,是否有更好的方法来围绕此类问题进行编码,以便它适用于所有版本,最好不要减速工作pythons?

有帮助吗?

解决方案

对于这样的情况,很高兴记住 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中偶然固定的!它看起来像是一个后车型Python 3功能,在2.6中未正确测试。

其他提示

您还可以创建自己的功能来完成工作,并根据所需的内容进行条件划分:

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铸造或异常机械。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top