سؤال

لقد صادفت خطأ في بيثون (على الأقل في 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 الذي يتم استخدامه بشكل خاطئ.

فهل هناك طريقة أفضل للترويج حول هذا النوع من المشكلات بحيث ستعمل على جميع الإصدارات ، ويفضل أن يكون ذلك دون إبطاءها في الثعبان العاملة؟

هل كانت مفيدة؟

المحلول

بالنسبة لحالات كهذه ، من الجيد أن نتذكر أن أ 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 بشكل صريح!

لا يزال الخطأ نفسه (ويبدو أنه بالتأكيد واحد) موجودًا في بيثون 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