如何解决foo.add代码中的错误?
Traceback (most recent call last):
File "C:\Users\User\Desktop\phonedatabase.py", line 81, in <module>
openphonedb()
File "C:\Users\User\Desktop\phonedatabase.py", line 23, in openphonedb
for entry in foo.add(name, number, showtype):
TypeError: 'NoneType' object is not iterable
在输入“类型”
后添加新用户时会发生此错误import shelve
import string
UNKNOWN = 0
HOME = 1
WORK = 2
FAX = 3
CELL = 4
def openphonedb():
foo = phonedb()
print "What would you like to do?"
print "Add = 1, Lookup = 2, Exit = 3"
entry = int(raw_input('>> '))
if entry == 1 :
namelookup = raw_input('Please enter a name: ')
for entry in foo.lookup(namelookup):
print '%-40s %s (%s)' % (entry.name, entry.number, entry.showtype() )
elif entry == 2:
name = raw_input('Name: ')
number = raw_input('Number: ')
showtype = input('Type (UNKNOWN, HOME, WORK, FAX, CELL): \n>> ')
for entry in foo.add(name, number, showtype):
print '%-40s %s (%s)'% (entry.name, entry.number, entry.showtype() )
elif entry == 3:
print "Close Successful"
quit
else:
print "Invalid."
openphonedb()
class phoneentry:
def __init__(self, name = 'Unknown', number = 'Unknown',
type = UNKNOWN):
self.name = name
self.number = number
self.type = type
# create string representation
def __repr__(self):
return('%s:%d' % ( self.name, self.type ))
# fuzzy compare or two items
def __cmp__(self, that):
this = string.lower(str(self))
that = string.lower(that)
if string.find(this, that) >= 0:
return(0)
return(cmp(this, that))
def showtype(self):
if self.type == UNKNOWN: return('Unknown')
if self.type == HOME: return('Home')
if self.type == WORK: return('Work')
if self.type == FAX: return('Fax')
if self.type == CELL: return('Cellular')
class phonedb:
def __init__(self, dbname = 'phonedata'):
self.dbname = dbname;
self.shelve = shelve.open(self.dbname);
def __del__(self):
self.shelve.close()
self.shelve = None
def add(self, name, number, type = HOME):
e = phoneentry(name, number, type)
self.shelve[str(e)] = e
def lookup(self, string):
list = []
for key in self.shelve.keys():
e = self.shelve[key]
if cmp(e, string) == 0:
list.append(e)
return(list)
#edit
if __name__ == '__main__':
openphonedb()
答案 0 :(得分:0)
也许,你只是忘了打电话给openphonedb()? 添加到最后:
if __name__ == '__main__':
openphonedb()
此外,“戒烟”在那里做什么?
答案 1 :(得分:0)
代码有其他问题,但关于问题的第一部分,将条目作为字符串进行比较(如果用户键入“a”,则不会出现错误)?
def openphonedb():
foo = phonedb()
print "What would you like to do?"
print "Add = 1, Lookup = 2, Exit = 3"
while True: # note this
entry = raw_input('>> ') # removed int()
if entry == '1' :
namelookup = raw_input('Please enter a name: ')
for entry in foo.lookup(namelookup):
print '%-40s %s (%s)' % (entry.name, entry.number, entry.showtype() )
elif entry == '2':
name = raw_input('Name: ')
number = raw_input('Number: ')
showtype = input('Type (UNKNOWN, HOME, WORK, FAX, CELL): \n>> ')
for entry in foo.add(name, number, showtype):
print '%-40s %s (%s)'% (entry.name, entry.number, entry.showtype() )
elif entry == '3':
print "Close Successful"
exit() # note this also
else:
print "Invalid."