【发布时间】:2021-06-29 21:22:50
【问题描述】:
我正在使用 CanvasAPI 开发用于自动评分作业的 Python 脚本,CanvasAPI 是用于 Canvas 学习管理平台的 Python 中的 API 包装器。在研究文档的过程中,我可以成功地在 Python 中针对一些参数发出 curl 命令。例如,下面的这种转换是为单个提交上传评分量规信息:
Curl command per the Canvas API docs:
PUT /api/v1/courses/:course_id/assignments/:assignment_id/submissions/:user_id
与:
rubric_assessment[criterion_id][points]
Turns into this via the CanvasAPI Python wrapper
edit(rubric_assessment={'criterion_#':{'points': 'point #'}})
但是,我在添加其他参数的语法上遇到了困难,这会创建看似嵌套的字典。例如,如果我想添加文本注释和成绩,API 文档提供了以下内容:
rubric_assessment[criterion_id][comments]
我尝试过的:
edit(rubric_assessment={'criterion_#':{'points': 'point #'}, {'criterion_#':{'comments': 'comment_text'}}})
会产生语法错误:
SyntaxError: positional argument follows keyword argument
我也尝试过:
edit(rubric_assessment={'criterion_#':{'points': 'point #'},{'comments': 'comment_text'}})
产生此错误:
SyntaxError: expression cannot contain assignment, perhaps you meant "=="?
构建传递两个参数的语法的正确方法是什么?非常感谢您提供的任何见解和帮助。
【问题讨论】:
-
您正在尝试将字典用作字典键,但没有关联值。你想要
{a:b, c:d}或{a:{b:c, c:d}, e:{f:g}}之类的东西。但是你有{a:{b:c},{d:e}}。最后一种情况是无效的,原因有两个:(1) 它试图使用{d:e}作为键,(2) 没有与键关联的值。相反,您需要{a:{b:c},d:{e:f}}或{a:{b:c,d:e}}之类的东西。请记住不要将字典用作键(在您的情况下,您的键是字符串),并且始终使用: value跟随您的键,其中value可能是也可能不是字典。
标签: python api syntax canvas-lms