invalid syntax python
print(f"str{kaf.a:a}{kaf.b:c}")
^
SyntaxError: invalid syntax
что в этом коде не так почему синтаксическую ошибку выдает?
print(f"str{kaf.a:a}{kaf.b:c}")
^
SyntaxError: invalid syntax
что в этом коде не так почему синтаксическую ошибку выдает?
Как уже вам написали в комментариях, ошибка возникает из-за того, что вы запускаете код какой-то старой версией Python (более старой, чем Python 3.6), где еще нет синтаксиса f-строк.
По поводу адаптации под старые версии Python:
В целом, такая строка f"{x:y}"
аналогична "{:y}".format(x)
или format(x, "y")
(и это во всех случаях превращается в вызов x.__format__("y")
).
Например,
x = 1
print(f"{x:010}")
print("{:010}".format(x))
print(format(x, "010"))
print(x.__format__("010"))
во всех случаях выведет 0000000001
(010 в данном случае означает "добить нулями слева до 10 символов").
Поэтому чисто механически ваш код перевести в стиль format
можно, например, так:
print("str{:a}{:c}".format(kaf.a, kaf.b))
и это может работать старых версиях Python, в том числе и на Python 2, при условии что у объектов, записанных в полях kaf.a
и kaf.b
реализован метод __format__
, который будет понимать, что за такое a
и с
.
Пример такого кода (адаптировано под Python 2):
# -*- coding: utf-8 -*-
from __future__ import print_function
class Field(object):
def __format__(self, spec):
# Для примера берем спецификатор форматирования (то что после двоеточия)
# и переводим в верхний регистр
return spec.upper()
class Kaf(object):
def __init__(self):
self.a = Field()
self.b = Field()
kaf = Kaf()
print("str{:a}{:c}".format(kaf.a, kaf.b))
Вывод:
strAC
Смысла именно в таком коде не много, но в принципе для своего класса с помощью переопределения метода __format__
можно реализовать какие-то свои обозначения, что-то похожее на спецификаторы форматирования чисел, например.