Python ValueError:无法从手动字段规范切换到自动字段编号

Python ValueError:无法从手动字段规范切换到自动字段编号,python,python-3.x,string-formatting,Python,Python 3.x,String Formatting,班级: class Book(object): def __init__(self, title, author): self.title = title self.author = author def get_entry(self): return "{0} by {1} on {}".format(self.title, self.author, self.press) 从中创建my book的实例: In [72]: m

班级:

class Book(object):
    def __init__(self, title, author):
        self.title = title
        self.author = author

    def get_entry(self):
        return "{0} by {1} on {}".format(self.title, self.author, self.press)
从中创建my book的实例:

In [72]: mybook = Book('HTML','Lee')
In [75]: mybook.title
Out[75]: 'HTML'
In [76]: mybook.author
Out[76]: 'Lee'
请注意,在get_entry方法中使用属性“self.press”时,我没有初始化该属性。请继续键入数据

mybook.press = 'Murach'
mybook.price = 'download'
到目前为止,我可以使用
vars

In [77]: vars(mybook)
Out[77]: {'author': 'Lee', 'title': 'HTML',...}
我在控制台中硬输入了很多关于mybook的数据。当尝试调用get_entry方法时,会报告错误

mybook.get_entry()
ValueError: cannot switch from manual field specification to automatic field numbering.
所有这些都是在控制台上以交互模式进行的。我珍视输入的数据,更进一步,我要在文件中pickle
mybook
对象。然而,它是有缺陷的。如何在互动模式下拯救它。 否则我必须重新开始

return "{0} by {1} on {}".format(self.title, self.author, self.press)
那不行。如果指定位置,则必须始终执行此操作:

return "{0} by {1} on {2}".format(self.title, self.author, self.press)
在您的情况下,最好让python自动处理:

return "{} by {} on {}".format(self.title, self.author, self.press)
python不能在一次代码执行中同时执行手动和自动精度处理(字段编号)。您可以为每个变量指定字段编号,也可以让python自动为所有变量指定字段编号


如果可以以表格形式给出适当的输出,如果 不使用格式,而是使用f“”

例如


无法处理值错误
姓名、分支机构、在校年份:
打印(f{名称:{10}}{分支:{20}}{年份:{12}})
名称分支机构年份
安基特cse 2
vijay ece 4
拉吉特1

您之所以会看到这个错误,主要是因为您使用了空花括号(表示python使用默认编号),然后在替换字段中指定了数字。这给解释器带来了混乱

 print ("{0} by {1} on {}".format(self.title, self.author, self.press))
这里{}的意思是从第一个替换字段开始,直到结束,而不是像从零开始的切片那样从0开始

要清除此错误,可以使用

print({0}由{1}在{2}上打印({0})。格式(self.title、self.author、self.press))

print({}by{}on{}.format(self.title、self.author、self.press))

 print ("{0} by {1} on {}".format(self.title, self.author, self.press))