запустив python3, используя код python2, я изменил httplib на http.client, ОШИБКА

#python #python-3.x

#python #python-3.x

Вопрос:

         if attr[:12] == '_Request__r_':
            name = attr[12:]
            if hasattr(Request, 'get_'   name):
                getattr(self, 'get_'   name)()
                return getattr(self, attr)
        raise AttributeError, attr

    def get_method(self):
        if self.has_data():
            return "POST"
        else:
            return "GET"  

     raise AttributeError, attr
                        ^
SyntaxError: invalid syntax  

Как мне исправить эту ошибку?
Как вы можете видеть выше, я добавил строки кода, выдающие ошибку.

Комментарии:

1. Просматриваю документацию о том, как создавать исключения в python 3 ( docs.python.org/3.7/reference /… ) по сравнению с python 2 ( docs.python.org/2.7/reference /… ) вы можете узнать, как изменилась спецификация. Потребуется много таких изменений, и такие инструменты, как 2to3, предложенные @Mark, могут значительно упростить этот переход.

Ответ №1:

Согласно документации 2to3:

raise Преобразует raise E, V в raise E (V) и raise E, V, T в raise E (V).с помощью_traceback(T). Если E является кортежем, перевод будет неправильным, потому что замена кортежей для исключений была удалена в Python 3.

Так что это должно быть:

 raise AttributeError(attr)
  

Комментарии:

1. Извините, я не силен в преобразовании python2 в код python3, можете ли вы преобразовать это также? ошибка повышения значения, «неизвестный тип URL: %s» % self.__ оригинал ^ Ошибка синтаксиса: недопустимый синтаксис

2. @John Почему бы не запустить скрипт 2to3 для переноса вашего кода? Ссылка есть в моем ответе. В таком случае это просто raise ValueError("unknown url type: %s" % self.__original") .

3. спасибо, делает ли 2to3 это автоматически? Или я должен зайти и внести изменения?

4. @John Да, прочитал документацию .

5. Извините, я пошел дальше и прочитал документацию. У меня другая ошибка, в ней говорится, что мне не хватает модуля mimetools