能帮我看看这一段代码为啥报TypeError吗?
[code=python]
def init():
return {"pre": None, "key": None, "value": None, "next": None}
def set(dict, key, value):
node = dict
while node is not None:
if node['key'] == key:
return
node = node['next']
node['next'] = {"pre": node, "key": key, "value": value, "next": None}
def get(dict, key):
node = dict
while node is not None:
if node['key'] == key:
return node['value']
node = node['next']
def exist(dict, key):
node = dict
while node is not None:
if node['key'] == key:
return True
node = node['next']
return False
if name == 'main':
dict = init()
for i in range(10):
key = "key_{}".format(i)
value = i
set(dict, key, value)
test_key = "key_4"
if exist(dict, test_key):
test_value = get(dict, test_key)
print("key is: {}, value is: {}".format(test_key, test_value))
[/code]
TypeError是操作符左右变量类型不一致,
node[key]有可能是None。
在set(dict, key, value)里有此类问题:
def set(dict, key, value):
node = dict
while node is not None:
if node['key'] == key:
return
node = node['next']
# Bug
# assert node['next'] is not None
# or
# assert node is not None
node['next'] = {"pre": node, "key": key, "value": value, "next": None}
假设循环到了最后一个node节点,
while node is the last node,
node['next'] = None,
node = node['next'] = None,
node['next'] = ... # ?!
node已经是None,故node['next']本身会报错,再赋值肯定也会报错。
def set(dict, key, value):
node = dict
while node is not None:
if node['key'] == key:
# node['value'] = value
return
# 判断是否最后一个node节点
if node.get('next', None) is None:
node['next'] = {"pre": node, "key": key, "value": value, "next": None}
break
else:
node = node['next']
这样发看不出原来的格式,而且你哪一行报错TypeError
在循环的时候,node['next'] = NONE ,代码循环始终会让 node = node['next'] = NoNE,这时候在进行node = {}的时候,就会有TypeERRor报错,因为node=NONE,但{} 是字典。