Вот версия, которую я бы порекомендовал использовать:
def database(self):
databasename=""
host=""
user=""
password=""
try:
self.fp=open("detailing.dat","rb")
except IOError:
with open("detailing.dat", "wb") as fp:
pickle.dump([databasename,host,user,password],fp,-1)
self.fp=open("detailing.dat","rb")
[databasename,host,user,password]=pickle.load(self.fp)
return
Как уже указывалось, на self.fp произошла опечатка. Но я заметил еще несколько вещей, которые могут вызвать проблемы.
Прежде всего, вы не должны напрямую использовать конструктор файлов . Вместо этого вы должны использовать встроенную функцию открытия.
Во-вторых, вам следует избегать вызова метода close файла вне блока finally. В этом случае я использовал Python 2.6 с блоком. Вы можете использовать это в Python 2.5 с помощью следующей команды:
from __future__ import with_statement
Это предотвратит застревание файла в случае, если где-либо будет сгенерировано исключение (поскольку оно закроет файл при выходе из блока with) Хотя это не является причиной вашей проблемы, важно помнить, что если один из методов объекта файла выдает исключение, файл будет оставаться открытым в sys.traceback неопределенное время.
(обратите внимание, что вы, вероятно, должны принять ответ Джаррета Харди, хотя, он поймал ошибку :-))