Я получил синтаксическую ошибку из модуля ‘collection’ в python 2 (функция со стрелкой)

python #syntax-error #ros

#python #синтаксическая ошибка #ros

Вопрос:

Я пытался что-то сделать, используя функцию ‘Counter’ (из коллекции).

И я получил следующую ошибку.

 File "/home/knut/catkin_ws/src/knut_ai_vehicle_2019/scripts/CameraStatus.py", line 5, in <module>
from collection import Counter

File "/home/knut/.local/lib/python2.7/site-packages/collection/__init__.py", line 1, in <module> 
from .Collection import Collection

File "/home/knut/.local/lib/python2.7/site-packages/collection/Collection.py", line 22
def __init__(self, items) -> None:
                          ^
SyntaxError: invalid syntax
 

Этот скрипт находится в пакете ROS, и, насколько я знаю, ROS поддерживает только python2.(Я прав?)

Итак, я использую python 2.

Я не знаю, но… Я предполагаю, что это проблема, которая возникает из-за того, что Python 2 больше не обновляется.

На самом деле, я никогда раньше не видел эту функцию со стрелкой.

Я продолжал искать, но не мог понять, почему эта стрелка вызывала проблему.

Единственное, что я сделал, это установить «коллекцию» с помощью pip и импортировать ее.

Я хочу, чтобы любой, кто столкнулся с этой ошибкой, помог мне.

Ответ №1:

Это то -> , что называется аннотацией функции. Аннотации функций в некоторой степени связаны с тем, как в python 2.x были строки документации. Они позволяют вам присоединять метаданные к функции, и в данном конкретном случае -> это аннотация для возвращаемого типа функции. Вы можете более подробно ознакомиться с аннотациями здесь.

Проблема, с которой вы столкнулись, связана с тем фактом, что аннотации являются функцией 3.x и, следовательно, это недопустимый синтаксис в 2.x. Что касается вашей точки зрения необходимости python 2.x для ROS, это неверно. ROS Noetic поддерживает Python3, и поскольку это новейшая стабильная версия, я бы предложил использовать этот дистрибутив.

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

1. Привет, спасибо за ответ. Я понял вашу точку зрения. После редактирования «из счетчика импорта коллекции» в «импорт коллекций» это было решено. Проблема в том, как вы сказали. И я использую ROS melodic. Я буду иметь это в виду. Спасибо.