سؤال

ولقد تم العمل على الحصول على وحدة 2.5 استدار إلى 3.0، ومعظمهم للتعليم الخاص بي، عندما كنت حصلت عالقا. الطبقة "باني" لديه كما الحرف الأول لها:

def __init__(self, **options):
    self._verifyOptions(options)
    self._options = options
    self._initDigest()
    self._initBuildNames()
    self._methods = []

ولكن يحدث خطأ في:

def _initDigest(self):
    import os, sys, hashlib
    digester = hashlib.md5()
    digester.update(self._options.get('code'))
    self._digest = digester.hexdigest()

والتي لديها كما traceback بها:

Traceback (most recent call last):
  File "<pyshell#5>", line 5, in <module>
    """, language="Cee")
  File "C:\Python30\lib\site-packages\PyInline\__init__.py", line 31, in build
    b = m.Builder(**args)
  File "C:\Python30\lib\site-packages\PyInline\Cee.py", line 17, in __init__
    self._initDigest()
  File "C:\Python30\lib\site-packages\PyInline\Cee.py", line 27, in _initDigest
    digester.update(self._options.get('code'))
TypeError: object supporting the buffer API required

ولقد تشغيله من خلال 2to3، لكنها ليست التقاط عليه. بقدر ما استطيع ان اقول، وظيفة التحديث يتوقع الحجة ليكون في شكل بايت / العازلة، ولكن لقد حاولت عدة طرق مختلفة لتحويله ولم تنجح.

وكما هو الحال دائما، أي مساعدة سيكون موضع تقدير كبير. :)

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

المحلول

وأنا على التخمين بأن هذا السطر:

digester.update(self._options.get('code'))

وينبغي أن تصبح:

digester.update(self._options.get('code').encode("utf-8"))

والترميز المطلوب الفعلية يمكن ان تكون مختلفة في الحالة الخاصة بك، ولكن سوف UTF-8 تعمل في جميع الحالات.

نصائح أخرى

وأنا طعاما حاول 3.0 حتى الان. ولكن الآن هناك تمييز بين أكبر سلسلة من بايت والسلاسل. وcodepoints عقد يونيكود الأخيرة في حين أن الأول لا يحملون يونيكود لكن سلاسل يونيكود encoded فقط. التجزئة تعمل على تسلسل بايت. لذلك سوف يكون لترميز الخاص بك (يونيكود) سلاسل أولا bevore إطعامهم إلى تجزئة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top