AttributeError: у объекта 'int' нет атрибута 'encode' - PullRequest
1 голос
/ 14 ноября 2011

Я унаследовал скрипт Python, который выдает следующую ошибку:

root        : ERROR    Unexpected exception encountered in application 'ImagesForWeb'
Traceback (most recent call last):
  File "build/bdist.linux-i686/egg/columbiancommon/scaffolding/consoleapp.py", line 169, in run_safe
    self.run(**kwargs)
  File "/var/scripts/ImagesForWeb/imagesforweb.py", line 102, in run
    gallery = columbiancommon.EllingtonPhotoGallery(configobj = self.cmgr)
  File "build/bdist.linux-i686/egg/columbiancommon/ellington/photogallery.py", line 51, in __init__
    self.Reload()
  File "build/bdist.linux-i686/egg/columbiancommon/ellington/photogallery.py", line 128, in Reload
    self.SetStatus(self.status)
  File "build/bdist.linux-i686/egg/columbiancommon/ellington/photogallery.py", line 68, in SetStatus
    self.SetControl("status", [self.status.encode('utf-8', 'replace')])
AttributeError: 'int' object has no attribute 'encode'

Я довольно плохо знаком с Python и еще не совсем развил навыки отладки, чтобы знать, как решить эту проблему.

Вот фрагмент кода из photogallery.py, на который ссылается вышеуказанная ошибка:

def SetStatus(self, status):
    """
    Sets the publication status of this photo gallery.

    Expects to be set to an integer constant, shortcuts include::

        EllingtonPhotoGallery.LIVE
        EllingtonPhotoGallery.DRAFT
        EllingtonPhotoGallery.DELETED
        EllingtonPhotoGallery.UNREVIEWED

    """
    if(not isinstance(status, int)):
        raise EllingtonMechanizeException("Unexpected status value.  Please use a status constant.")
    self.status = status
    self.SetControl("status", [self.status.encode('utf-8', 'replace')])

Это метод SetControl, который находится в scaffolding.py

def SetControl(self, control_name, control_value_unclean):
    """
    Raw access to the mechanize method of setting controls to specific values.

    **WARNING** Do not use this unless you have a really good reason to do so-- `EllingtonMechanizeScaffolding.SetControlToValue`
    and `EllingtonMechanizeScaffolding.SetControlToValueSafe` are much more elegant solutions.

    :Parameters:
        - `control_name`: The name of the control you're trying to assign a value to.
        - `control_value_unclean`: The value to assign to said control.  Either a boolean value, 

    """
    self.browser[control_name] = control_value_unclean
    return True

Я полагаю, что это строка, которая говорит self.SetControl("status", [self.status.encode('utf-8', 'replace')]) , которая выдает ошибку, однако я не могу сказать, почему ошибка происходит. Код работает с тех пор, как я унаследовал его 6 месяцев назад, и он не изменился с моей стороны.

Любая помощь будет оценена.

Ответы [ 2 ]

8 голосов
/ 14 ноября 2011

Сначала вы утверждаете status как экземпляр int, а затем пытаетесь использовать метод encode, которого у него нет, потому что это метод unicode.Если вы хотите преобразовать целое число в строку, используйте unicode(self.status).Тогда вы можете использовать encode, но, скорее всего, не стоит.

0 голосов
/ 27 января 2017

использовать repr() функцию.Эта функция может обрабатывать Unicode, UTF, NULL и INT.Хорошей частью этой функции является то, что эта функция не теряет никакого значения при преобразовании юникода (как encode('utf-8') делает) или ascii в строку.Кроме того, эта функция предоставляет ограничения по размеру для представлений, что обеспечивает большую гибкость объекта.

...