Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用多个字段规范和条件语句格式化字符串语法;值错误_Python_Python 3.x_Formatting - Fatal编程技术网

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}"