Eva*_*son 1 python session-variables filter flask
TypeError: Object of type 'filter' is not JSON serializable
Run Code Online (Sandbox Code Playgroud)
这真的让我很困惑。(我的 'realfiles' 函数只是确保目录列表不包含任何 Thumbs.db 或 .DS_Store 文件,即使我将其减少到“返回 True”,我也会得到同样的错误。)
我不是要序列化过滤器,无论这意味着什么。我正在序列化该过滤器的输出列表。对?Python 不是我最好的语言,所以我最初认为我的错误是试图将过滤器的输出分配给同一行中的会话变量 - 在 Javascript 中可以正常工作的东西 -
session['dir_listed_projects'] = filter( realfiles , pList )
session['dir_listed_templates'] = filter( realfiles , tList )
Run Code Online (Sandbox Code Playgroud)
所以我重写了它以分配给一个中间变量:
@app.route('/projects', methods=['GET', 'POST'])
def projects():
listA = listdir( outta( here, 2 ) + '/Projects')
listB = listdir( outta( here, 2 ) + '/_Templates')
pList = filter( realfiles , listA )
tList = filter( realfiles , listB )
session['dir_listed_projects'] = pList
session['dir_listed_templates'] = tList
return render_template( 'projects.html' )
Run Code Online (Sandbox Code Playgroud)
不。
TypeError: Object of type 'filter' is not JSON serializable
Run Code Online (Sandbox Code Playgroud)
如果我根本不使用过滤器而是直接分配 listdir 的输出,则页面将无错误地呈现 -在我开始从 Python 2.x 升级到 3.x 之前,它与过滤器一起工作正常。
小智 5
在 Python 3 中,filter返回过滤器对象(迭代器),而不是列表。
filter(lambda x: x == 2, [1, 2, 3])
<filter object at 0x7f37049af210>
Run Code Online (Sandbox Code Playgroud)
要将输出作为列表,请使用该list函数。
list(filter(lambda x: x == 2, [1, 2, 3]))
[2]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2690 次 |
| 最近记录: |