Ошибка функциональной клавиши формата Python()

#python

Вопрос:

Я новичок в Python и получаю ошибку ключа, пытаясь использовать функцию format() :

 def hello( name="Sean", age=0 ):  return 'Hello, '   name   " you are { age } years old".format( age )  sentence1 = hello( 'Mark', 17 )  

Ошибка:

 KeyError: ' age '  

Что я делаю не так?

Ответ №1:

Если вы используете именованный заполнитель в строке формата, вам необходимо указать именованные аргументы.

И у вас не должно быть пробелов вокруг имени в заполнителе.

 def hello( name="Sean", age=0 ):  return 'Hello, '   name   " you are {age} years old".format(age=age)  

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

1. Бармар, я попробовал ваше предложение, но все равно получаю тот же самый точный результат, ошибка ключа: «возраст «. Что в этом плохого? Я хочу использовать этот подход вместо f-строк.

2. Избавьтесь от пробелов в { age }

3. Тот же результат: Ошибка ключа: «возраст» Пожалуйста, проверьте свой код. Я приму ваш ответ, когда он закончится.

4. Я проверил это, я не получаю этой ошибки. Вы получаете ошибку только с пробелами.

5. Спасибо, Бармар, это ДЕЙСТВИТЕЛЬНО работает. Мой сервер отключился. Это был ответ, который я искал. Спасибо, что не используете f-строки.

Ответ №2:

Просто используйте современный подход к строкам f.

 def hello( name="Sean", age=0 ):  return f'Hello, {name} you are {age} years old.'  

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

1. Это не объясняет, почему исходный код не работал.

2. @Бармар — ты прав . Но исходный код представляет собой смесь конкатенации строк с использованием и формата, поэтому мне показалось, что для этого нужен другой подход.

3. Похоже, он использует .format() for age , потому что это int скорее строка, чем строка, поэтому ее нельзя объединить.

Ответ №3:

Уберите слово «возраст» между фигурными скобками. Как таковой

 def hello( name="Sean", age=0 ):  return 'Hello, '   name   " you are {} years old".format( age )  sentence1 = hello( 'Mark', 17 )  

Ответ №4:

Просто используйте строки f.

 def hello( name="Sean", age=0 ):  return (f'Hello, {name} you are {age} years old.')  sentence1 = hello( 'Mark', 17 ) print(sentence1)  

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

1. Это не ответ на вопрос, это показывает совершенно другой способ сделать то же самое.

2. Справедливо, однако, что я чувствую, что строки f в целом более питонические, не говоря уже о том, что их проще реализовать.

Ответ №5:

Я предлагаю использовать f-strings : они позволяют вам форматировать непосредственно в вашей строке. Обратите внимание, что вы должны поставить точку f перед кавычками.

 print(f"Hello {name} you are {age} years old")  

Ответ №6:

Если вы хотите отформатировать текст и заполнить строку некоторыми переменными, вы можете поместить их в метод форматирования «в нужном вам» порядке.
если есть только одна переменная, вы можете изменить свой код на этот:

 def hello( name="Sean", age=0 ):  return 'Hello, '   name   " you are {} years old".format(age)  sentence1 = hello( 'Mark', 17 )  

Также этот работает:

 def hello( name="Sean", age=0 ):  return 'Hello, '   name   " you are {age} years old".format(age=age)  sentence1 = hello( 'Mark', 17 )  

В некоторых случаях вы, возможно, захотите иметь несколько переменных. Вы можете использовать второй метод, чтобы ваш код был более читабельным.

Также использование f-string находится на столе (рекомендуется). подобный этому:

 def hello( name="Sean", age=0 ):  return f"Hello, {name} you are {age} years old"  sentence1 = hello('Mark', 17)  

Ответ №7:

удалите пробел и передайте переменную возраста в формат

 "you are {age} years old".format(age=age)  def hello( name="Sean", age=0 ):  return 'Hello, '   name   " you are {age} years old".format(age=age)  sentence1 = hello( 'Mark', 17 )  

Ответ №8:

При использовании .format фигурные скобки должны быть пустыми:

 def hello( name="Sean", age=0 ):  return 'Hello, '   name   " you are {} years old".format(age)  sentence1 = hello( 'Mark', 17 )  

Вам следует рассмотреть возможность использования f»» как такового:

 return f'Hello, {name} you are {age} years old'  

Таким образом, вы можете напрямую помещать переменные в свою строку