解决不同版本Python中的bug问题
我在使用Python(至少是2.6.1版本)时发现了一个bug,跟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版本中的速度呢?
2 个回答
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转换或者处理错误的复杂步骤。
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 版本,这种方法显然更好!
这个 bug(确实看起来像是一个 bug)在 Python 2.6.5 中仍然存在,但我在 bugs.python.org 上找不到任何相关信息,所以也许它在 2.7 中是意外修复的!这看起来像是一个从 Python 3 移植过来的功能,但在 2.6 中没有经过充分测试。