关于额外信贷的第3个问题,我很难过。有问题的代码是:
target.write(line1)
target.write("\n")
target.write(line2)
target.write("\n")
target.write(line3)
target.write("\n")
问题要求“使用字符串,格式和转义符只用一个target.write()命令而不是6来打印line1,line2和line3。
所以,我以为我会这样写:
target.write("%s + \n + %s + \n + %s + \n") % (line1, line2, line3)
它返回:TypeError:%支持的操作数类型:'NoneType'和'tuple。'我做了一些关于它们的研究并且找不到任何东西,但它使用%r返回了相同的错误。
认为+符号不正确,因为它只是一个字符串,我删除了它们:
target.write("%s \n %s \n %s \n") % (line1, line2, line3)
仍然没有。然后我试了一下:
target.write("%s" + "\n" + "%s" + "\n" + "%s" + "\n") % (line1, line2, line3)
这个至少将错误更改为:TypeError:%支持的操作数类型:'NoneType'和'str'。这种变化产生了同样的错误:
target.write("%s") % (line1 + line2 + line3)
无论如何,很明显我被困在某个地方。我认为我的问题集中在我正在使用的%s /%r上,但我找不到我认为可行的替代方案,或者我可能只是错误地写了写语句。
对不起,如果这种药开了,我只是想我会试着解释一下我的思维过程。谢谢你的帮助!
答案 0 :(得分:17)
这个怎么样?
target.write("%s\n%s\n%s\n" % (line1, line2, line3))
答案 1 :(得分:1)
%插值运算符适用于字符串。您将它应用于target.write的返回值,该值不返回任何内容(因此为NoneType)。你想对字符串本身进行插值:
target.write("%s\n%s\n%s\n" % (line1, line2, line3) )
大多数学习Python的人在print语句的上下文中首先遇到%,所以认为它与输出紧密相关是可以理解的,但它在字符串级别完成所有工作。
答案 2 :(得分:0)
您的原始尝试尝试使用%
运算符,返回值为target.write()
- 即无。您需要在%
()
内发生target.write
{/ 1}}
target.write ( "%s\n%s\n%s\n" % (line1, line2, line3))
请注意,另一种解决方案是:
target.write('\n'.join([line1, line2, line3, '']))
修改强>
在末尾添加空字符串以强制第三个换行符(否则只会有两个换行符)。
答案 3 :(得分:0)
target.write需要str对象作为其args 并给出一个NoneType对象
答案 4 :(得分:0)
在Python 3中对我有用的另一种方法是:
target.write(f"{line1} \n{line2} \n{line3} ")
答案 5 :(得分:-1)
我本人使用此脚本在文件中为同一问题写了几行。 (使用python 3.6)
target.write(line1 + "\n" + line2 + "\n" + line3 + "\n")