gpt4 book ai didi

python - 语法错误 : keyword can't be an expression while creating a dictionary

转载 作者:行者123 更新时间:2023-11-28 19:56:40 25 4
gpt4 key购买 nike

我从 cookie 中检索到两个字符串

name = 'rack.session'
val = 'CookieVal'

使用它们我想建立一个字典

cookies = dict(rack.session=val)

但是SyntaxError: keyword can't be an expression

所以我试图转义 (.) 点

re.escape(name)

...但它引发了同样的错误

这怎么可能?根据 Python type() 名称是一个字符串:

type(name)
<class 'str'>

为什么 Python 会混淆字符串和表达式?

最佳答案

rack.session 的问题在于 python 认为您正在尝试使用表达式 rack.session 的值并将其传递给 dict( ),这是不正确的,因为 dict() 希望您在使用关键字参数时传递变量名称,然后在创建 dict 时将这些变量名称转换为字符串。

简单的例子:

>>> dict('val' = 'a')     
File "<ipython-input-21-1cdf9688c191>", line 1
SyntaxError: keyword can't be an expression

所以,不能在=的左边使用对象,只能使用有效的标识符。

字节码使 rack.session 发生的事情更加清晰:

>>> import dis
>>> dis.dis(lambda : dict(rack.session , val))
1 0 LOAD_GLOBAL 0 (dict)
3 LOAD_GLOBAL 1 (rack) # load the object `rack`
6 LOAD_ATTR 2 (session)# use the value of it's attribute
# `session`
9 LOAD_GLOBAL 3 (val)
12 CALL_FUNCTION 2
15 RETURN_VALUE

因此,对于 rack.session = val,python 会认为您正在尝试使用从 rack.session 返回的值并将其传递给 dict,这是不正确的。其次,rack.session 不是有效标识符,因为 python 标识符中不允许使用点 (.)。

这适用于 python 中的任何函数,甚至 dict 也适用,关键字参数必须是有效的标识符。

来自docs :

keyword_item   ::=  identifier "=" expression

有效示例:

>>> dict(foo = 1, bar = '2')
{'foo': 1, 'bar': '2'}

对于您的示例,您可以简单地执行以下操作:

>>> val = 'CookieVal'
>>> name = 'rack.session'
>>> dict(((name,val),))
{'rack.session': 'CookieVal'}
#or
>>> {name:val}
{'rack.session': 'CookieVal'}

关于python - 语法错误 : keyword can't be an expression while creating a dictionary,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17810927/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com