我是从perl转到python,这个问题似乎是不可思议的,因为这些不相关的例子很混乱。
我正在尝试为可变长度的对象列表创建快速查找索引。可以通过名称或编号返回对象。 byname和bynum方法在“return”
处抛出语法错误我在这里做错了什么?
提前致谢!
class BookSumIndex():
bookptr = 0
BookSum = []; # object container
ByName = {} # named referent to objects
ByNum = {} # numerical referent to objects
def addbook(self,thisbook,bookname,booknum):
self.BookSum.insert(self.bookptr,BookSumObject())
namepair = {bookname:self.bookptr}
numpair = {booknum:self.bookptr}
self.ByName.update(namepair)
self.ByNum.update(numpair)
self.bookptr += 1
def byname(self,bookname):
bnam = self.ByName.get(bookname)
if type(bnam) != "NoneType":
thisbook = self.BookSum.get[int(bnam)]
return thisbook
def bynum(self,booknum):
bnum = self.ByNum.booknum
if type(bnum) != "NoneType":
thisbook = self.BookSum[self.ByNum.get[int(bnum)]
return thisbook
答案 0 :(得分:2)
你在bynum方法中缺少本书的右大括号。
thisbook = self.BookSum[self.ByNum.get[int(bnum)]
应该是:
thisbook = self.BookSum[self.ByNum.get[int(bnum)]]
我还建议您使用比较:
bnum is not None
而不是:
type(bnum) == "NoneType"
我不确定为什么会出现语法错误,但由于没有返回值的方法会为变量分配None,因此您可以返回None以查看IDE是否不再标记方法。 E.g:
def bynum(self,booknum):
bnum = self.ByNum.booknum
if bnum is not None:
thisbook = self.BookSum[self.ByNum.get[int(bnum)]
return thisbook
else:
return None
另外,以防万一检查本书的缩进并像上面那样返回。