我一直收到错误:“不可用类型:列表”表示行(routing_table [key] [0] = [[params],func]。我正在尝试将url和函数传递给路由函数。这条路径函数应该使用正则表达式选择其他函数的参数。最终目标是读入“/ page / <page_id>
,然后选择<page_id>
并用用户输入替换它。用户输入然后将传递给函数。我不明白为什么这不起作用。
import re
routing_table = {}
def route(url, func):
key = url
key = re.findall(r"(.+?)/<[a-zA-Z_][a-zA-Z0-9_]*>", url)
if key:
params = re.findall(r"<([a-zA-Z_][a-zA-Z0-9_]*)>", url)
routing_table[key][0] = [[params], func]
else:
routing_table[url] = func
def find_path(url):
if url in routing_table:
return routing_table[url]
else:
return None
def index():
return "This is the main page"
def hello():
return "hi, how are you?"
def page(page_id = 7):
return "this is page %d" % page_id
def hello():
return "hi, how are you?"
route("/page/<page_id>", page)
print(routing_table)
答案 0 :(得分:1)
如果您只对找到的第一个值感兴趣,我不确定您使用re.findall
的原因。
然而,您的问题只是索引结果的方式:key
是一个列表,如错误所示,您不能将列表用作dict键。但是你已经将[0]
置于第一组括号之外,因此Python将此解释为您希望设置routing_table[key]
的第一个值,而不是您想要使用{{1的第一个值作为要设置的东西。
你的意思是:
key