Почему я не могу вызвать dict.get () в f-строке? (Python 3.8.1) - PullRequest
0 голосов
/ 14 апреля 2020

Вопрос

Есть ли у кого-нибудь понятное новичку объяснение, почему я получаю SyntaxError, когда я вызываю .get() из f-строки в Python> 3.8?

Проблема

Когда я вызываю dict.get() непосредственно в f-строке, я получаю SyntaxError. Если я храню вызов dict.get() в переменной и ссылаюсь на переменную в строке f, он работает без ошибок.

Это работает

def new_item():
    desc = request.form.get('description', 'No description found')
    return f'Your new item to insert\nDescription:{desc}'

http://127.0.0.1: 5000 / new_item отображает:

Website returning form['description']

Это не работает

def new_item():
    return f'Your new item to insert\nDescription:{request.form.get('description', 'No description found')}'

SyntaxError: неверный синтаксис

File ".\server.py", line 39
    return f'Your new item to insert\nDescription:{request.form.get('description', 'No description found')}'
                                                             ^

Мои исследования

StackOverflow изобилует вопросами ( здесь , здесь , здесь , здесь ) и / или проблемы, которые были решены простым вызовом адекватной Python версии. У меня установлена ​​такая версия Python, и я также вызываю соответствующую команду (на самом деле f-строка работает в приведенном выше примере). В любом случае, вот что такое PowerShell:

> python
Python 3.8.1 (tags/v3.8.1:1b293b6, Dec 18 2019, 23:11:46) [MSC v.1916 64 bit (AMD64)] on win32

1 Ответ

1 голос
/ 14 апреля 2020

После некоторых дополнительных исследований (см. здесь ), решение моей проблемы заключается в следующем:

Я вызываю свойство словаря с одной строкой в ​​кавычках. Литерал f-строки интерпретирует одинарную кавычку как конец строки и впоследствии выдает SyntaxError.

Solution

1) Вместо вызова свойства словаря с одиночной кавычкой, вызовите его с двойной кавычкой, вот так:

def new_item():
    return f'Your new item to insert\nDescription:{request.form.get("description", "No description found")}'

Как отметил @Todd в комментарии, есть и другие решения. Для полноты:

2) Инвертировать 1) - Использовать двойные кавычки для f-строки и одинарные для любых строк внутри нее.

3) Использовать обратную косую черту \ чтобы экранировать кавычки

4) Используйте тройные двойные кавычки в строке и затем что-нибудь внутри нее

5) Сохраняйте значения словаря отдельно (как в рабочем решении в вопросе) , Как отмечает @chepner, это имеет преимущество в соблюдении максимальной длины строки и улучшении читабельности.

-

Спасибо всем за участие в комментариях. Я проголосовал.

...