Search code examples
pythonpython-3.xstring-formatting

ValueError: cannot switch from manual field specification to automatic field numbering


The class:

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)

Create an instance of my book from it:

In [72]: mybook = Book('HTML','Lee')
In [75]: mybook.title
Out[75]: 'HTML'
In [76]: mybook.author
Out[76]: 'Lee'

Please notice that I didn't initialize attribute 'self.press',while use it in the get_entry method.Go ahead to type in data.

mybook.press = 'Murach'
mybook.price = 'download'

Till now, I can specify all the data input with vars

In [77]: vars(mybook)
Out[77]: {'author': 'Lee', 'title': 'HTML',...}

I hardtype lot of data about mybook in the console.When try to call get_entry method, errors report.

mybook.get_entry()
ValueError: cannot switch from manual field specification to automatic field numbering.

All this going in interactive mode on console.I cherish the data inputed, further to pickle mybook object in file. However, it is flawed. How can rescue it in the interactive mode. or I have to restart all over again.


Solution

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

    that doesn't work. If you specify positions, you have to do it through the end:

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

    In your case, best is to leave python treat that automatically:

    return "{} by {} on {}".format(self.title, self.author, self.press)