TypeError:格式字符串的参数不足 %s

13 投票
2 回答
34826 浏览
提问于 2025-04-18 10:00

这是我的代码

import sys
name = input("Enter your name:")
last_name = input("Enter your last name:")
gender = input("Enter your gender:")
age = input("Enter your age:")
print ("So your name is %s, your last name is %s, you are %s and you are %s years old" % name, last_name, gender, age)

我查过这个话题,但我不太明白。

2 个回答

9

你需要一对括号:

>>> '%s %s' % 'a', 'b'  # what you have
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: not enough arguments for format string
>>>
>>>
>>> '%s %s' % ('a', 'b')  # correct solution
'a b'

'%s %s' % 'a', 'b' 这个表达式会被计算成 ('%s %s' % 'a'), 'b',这样会在 '%s %s' % 'a' 这里出错,因为你提供的参数比格式说明符少。


print("So your name is %s, your last name is %s, you are %s and you are %s years old" % (name, last_name, gender, age))
23

你需要把字符串格式化的参数放在括号里:

print (... % (name, last_name, gender, age))

否则,Python只会把name当作字符串格式化的一个参数,而把其他的当作print函数的参数。


不过要注意,现在不太推荐使用%来进行字符串格式化。现代的做法是使用str.format

print ("So your name is {}, your last name is {}, you are {} and you are {} years old".format(name, last_name, gender, age))

撰写回答