能帮我看看这一段代码为啥报TypeError吗?

能帮我看看这一段代码为啥报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,但{} 是字典。