Python 使用多个字段规范和条件语句格式化字符串语法;值错误
我有一个列表Python 使用多个字段规范和条件语句格式化字符串语法;值错误,python,python-3.x,formatting,Python,Python 3.x,Formatting,我有一个列表mylist=[1,2,3]和一个数字n,我想以特定的方式打印它: {n} {book或books}read ok:{mylist元素一个接一个,用逗号分隔) 例如: 1本书阅读正常:1、2、3 2本书阅读正常:1、2、3 打印书籍的决定取决于n,即如果n为1,则打印书籍,否则打印书籍。实现这一点的代码是: print("{:s}", "book" if n == 1 else "books") 用于打印列表元素的代码为:
mylist=[1,2,3]
和一个数字n
,我想以特定的方式打印它:
{n} {book或books}read ok:{mylist元素一个接一个,用逗号分隔)
例如:
1本书阅读正常:1、2、3
2本书阅读正常:1、2、3
打印书籍的决定取决于n
,即如果n为1,则打印书籍,否则打印书籍。实现这一点的代码是:
print("{:s}", "book" if n == 1 else "books")
用于打印列表元素的代码为:
print(*mylist, sep=' , ')
但是,我在尝试将所有这些合并到所需的输出中时遇到了问题,其中包括用于显示n
的.format
,如上所述
以下是我迄今为止所尝试的:
print("{0} {:s} read ok: {1}".format(n, *mylist, sep=' , '), "book" if n == 1 else "books")
它给出了
ValueError:无法从手动字段规范切换到自动字段编号
对print()
的解析调用:
该错误是手动和自动字段规范混合的结果,正如它明确指出的那样。不要将手动(“{0}”
等)与自动(“{}”
)混合。字符串中有0、automatic和1。没有明智的方法来决定自动字段应该是哪个位置参数,因此会引发错误
发件人:
如果格式字符串中的数字arg_名称按顺序为0、1、2、…,则可以全部省略(而不仅仅是部分)
在这种情况下,工作打印可以是:
print("{} {} read ok: {}".format(
n,
"book" if n == 1 else "books",
', '.join(str(i) for i in mylist)
))
格式字符串等于:
"{0} {1} read ok: {2}"
关于这个消息,你还不明白什么?你有三个占位符,
{0}
,{:s}
和{1}
,Python无法理解您期望的结果!@jornsharpe好吧,尽管错误消息的要点和信息是,我不知道如何克服它并实现我的目标。因此,我的问题。快速跟进:您能简要解释一下为什么{:s}
是不需要的?混淆了它以前是如何与:s
隔离工作的,这取决于您的隔离测试。冒号后面的部分是,例如在“{:s}”中是s
。因此,对于字符串类型,它等于“{}”
。例如,对于整数,默认的表示类型是d
。
"{0} {1} read ok: {2}"