在不同版本中围绕Python错误工作
-
01-10-2019 - |
题
我在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铸造或异常机械。
不隶属于 StackOverflow