質問

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バージョンのテストは間違っていると感じます。

それで、この種の問題についてコーディングするより良い方法はあります。そうすれば、すべてのバージョンで機能することは、できれば作業用のPythonのために減速することなく機能しますか?

役に立ちましたか?

解決

このような場合は、それを覚えておくのは良いことです 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バージョンを明示的にチェックすることは確かに望ましいです!

バグ自体(そして確かに1つのように思われます)はまだPython 2.6.5に存在していますが、で言及することはできませんでした bugs.python.org, 、だから多分それは2.7で偶然修正された! 2.6で適切にテストされていないバックポートされたPython 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 あなたのコードで。このようにして、例外は一度しか起こりません。ランタイム中に、過剰なユニコード鋳造または例外機械なしで正しい関数が使用されます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top