web-dev-qa-db-ja.com

ValueError:手動フィールド指定から自動フィールド番号付けに切り替えることはできません

クラス:

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)

それから私の本のインスタンスを作成します:

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

属性「self.press」を初期化せず、get_entryメソッドで使用していることに注意してください。データを入力してください。

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.

これはすべてconsole.Iでインタラクティブモードになります。入力されたデータを大事にし、さらにファイル内のmybookオブジェクトをpickleします。ただし、欠陥があります。インタラクティブモードでどのようにレスキューできますか。または、最初からやり直す必要があります。

13
Algebra
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)
18