我在bytearray.fromhex
函数中遇到了Python(至少在2.6.1中)的错误。如果您尝试使用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减慢速度?
答案 0 :(得分: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!它看起来像是一个后端移植的Python 3功能,在2.6中没有正确测试。
答案 1 :(得分: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强制转换或异常机制。