#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()
forage
, потому что это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'
Таким образом, вы можете напрямую помещать переменные в свою строку