Недопустимый синтаксис строки F в Python 3.5

Я знаю, что F Strings были введены в Python 3.6. Из-за этого я получал ошибку - Invalid Syntax

DATA_FILENAME = 'data.json'
def load_data(apps, schema_editor):
    Shop = apps.get_model('shops', 'Shop')
    jsonfile = Path(__file__).parents[2] / DATA_FILENAME

    with open(str(jsonfile)) as datafile:
        objects = json.load(datafile)
        for obj in objects['elements']:
            try:
                objType = obj['type']
                if objType == 'node':
                    tags = obj['tags']
                    name = tags.get('name','no-name')
                    longitude = obj.get('lon', 0)
                    latitude = obj.get('lat', 0)
                    location = fromstr(F'POINT({longitude} {latitude})', srid=4326)
                    Shop(name=name, location = location).save()
            except KeyError:
                pass    

Ошибка -

location = (F'POINT({longitude} {latitude})', srid=4326)
                                           ^
SyntaxError: invalid syntax

Так что я использовал -

fromstr('POINT({} {})'.format(longitude, latitude), srid=4326)

Ошибка была удалена, и это сработало для меня. Затем я нашел эту библиотеку будущее-fstrings. Должен ли я использовать его. Что удалит вышеперечисленное Invalid Error

Строки формата («f») не были представлены до Python 3.6.

Klaus D. 15.03.2019 13:04

Ну, f-строки доступны только с Python 3.6.

DeepSpace 15.03.2019 13:04

Почему сообщение об ошибке не соответствует вашему коду?

Aran-Fey 15.03.2019 13:05

Скорее всего просто ошибка копирования и вставки.

holdenweb 15.03.2019 13:06

@holdenweb Это была бы странная ошибка копирования-вставки, из-за которой оператор пропускается посередине.

Klaus D. 15.03.2019 13:07

Квантовое туннелирование Bytestring, скорее всего ;-). Просто используя самую благотворительную интерпретацию.

holdenweb 15.03.2019 13:08

Еще больше дерьма Python, которое ломает базовый ввод-вывод... Разработчики Python должны получить премию Дарвина. Насколько сложно заставить ввод-вывод «просто работать»?

jww 09.04.2019 16:51
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
9
7
16 981
1

Ответы 1

Для более старых версий Python (до 3.6):

Используя future-fstrings:

pip install future-fstrings 

вы должны разместить специальную строку в верхней части вашего кода:

coding: future_fstrings

Следовательно, в вашем случае:

# -*- coding: future_fstrings -*-
# rest of the code
location = fromstr(f'POINT({longitude} {latitude})', srid=4326)

Необходимо, чтобы оператор начинался с решётки, то есть "# -- кодировка: future_fstrings --", иначе не сработает. Пожалуйста, исправьте свой ответ.

Alexander Samoylov 07.12.2020 12:29

Другие вопросы по теме