为什么%s接受Integer类型变量,%d为String变量赋予错误

时间:2014-12-23 10:27:48

标签: python

enter code here
my_name="vamsi"
my_age=20
my_height=74
my_weight=180
my_eyes="Blue"
my_teeth="White"
my_hair="Brown"

print "Let's talk about %s" % my_name
print "He's %s inches tall" % my_height # This works fine
print "He's %d pounds heavy"%my_weight
print "He's got %d eyes and %s hair"%(my_eyes,my_hair) #This gives error asking for an integer


在上面的代码片段中,%s接受Integer并打印Integer的确切值。但%d不会对字符串执行此操作,而是说错误number is required ,not str

ps:这个问题不重复,它可能是http://learnpythonthehardway.org/book/ex5.html中规定的旧python使用,我在询问问题,发布代码和错误之前通过在线搜索完成了我的工作! / p>

2 个答案:

答案 0 :(得分:1)

%s用于字符串,%d用于数字

相反,您可以尝试使用.format(),这是怎么回事:

my_name = 'vamsi'
my_height = 74
my_eyes = 'Blue'
my_hair = 'Brown'

print 'Let\'s talk about {}'.format(my_name)
print 'He\'s {} inches tall'.format(my_height)
print 'He\'s got {eyes} eyes and {hair} hair'.format(eyes=my_eyes, hair=my_hair)

现在您可以交换变量而无需更改占位符。最后一行代码可能看起来有点冗长,但它可以增加可读性。

答案 1 :(得分:0)

使用s格式化程序时,使用str()将任何对象隐式转换为字符串。 r格式化程序存在类似的东西,它会在对象上调用repr()

这些规则没有为例如整数定义:d格式化程序并不意味着调用int(),因为这并不总是定义(int("hello")会引发例如ValueError。另见巴特的评论。

您可以在the documentation(第二张表)中找到。

当例如一个人使用logging模块时,这也可以很好地工作,你可以简单地告诉格式化字符串使用“%s”,提供你感兴趣的对象用于记录,以及明智的(好的,希望的)会出现;没有异常的可能性,因此您的代码将记录您感兴趣的任何内容而不会崩溃。

人们提到了字符串的format方法。默认值(字符串中的空{})取决于使用的对象:它将使用d格式表示整数,s表示字符串,g表示一个浮点。请参阅为每种类型列出的tables in the documentation