【问题标题】:openwhisk error: "The action did not return a dictionary."openwhisk 错误:“该操作未返回字典。”
【发布时间】:2018-02-13 05:05:53
【问题描述】:

在尝试调用 openwhisk 操作时,我收到 400 错误,并显示以下结果和日志:

结果:

114492bd33e444c88492bd33e4a4c8a8
{
  "error": "The action did not return a dictionary."
}

日志

[
"2018-02-12T20:20:27.224409701Z stderr: Traceback (most recent call 
last):",
"2018-02-12T20:20:27.224534535Z stderr: File \"pythonrunner.py\", line 
88, in run",
"2018-02-12T20:20:27.224550304Z stderr: exec('fun = %s(param)' % 
self.mainFn, self.global_context)",
"2018-02-12T20:20:27.224559746Z stderr: File \"<string>\", line 1, in 
<module>",
"2018-02-12T20:20:27.224578509Z stderr: File \"__main__.py\", line 308, 
in main",
"2018-02-12T20:20:27.224587541Z stderr: if 
datos_usuario[\"__ow_method\"] 
== \"get\":",
"2018-02-12T20:20:27.224596543Z stderr: KeyError: '__ow_method'"
]

到目前为止,该操作一直正常工作,这让我认为该错误可能与访问 API 的特定问题有关。关于如何解决此问题的任何想法?

谢谢!

【问题讨论】:

  • 如果它没有返回字典,它返回的是什么?为什么?
  • 在调用 HTTP 处理程序 ow_method 时,除了简单的“错误”消息之外似乎没有返回任何内容。这是我在检查控制台时得到的:加载资源失败:net::ERR_NAME_NOT_RESOLVED
  • 函数正在崩溃 - 如果缺少此键datos_usuario["__ow_method"] ,该方法将引发异常。相反,请先检查if "__ow_method" in datos_usuario
  • 谢谢!我刚刚做了,显然问题出在 API 路由链接上。现已修复。

标签: python api ibm-cloud openwhisk


【解决方案1】:

您需要将该操作创建为webaction。该错误提示 __ow_method 不存在,仅当您的操作是 webaction 时才会存在。

您的操作对该字段有任何作用吗?如果您想有条件地编写您的操作(如:检测它是否实际上是一个网络操作),您需要检查该字段是否实际存在。在 python 中,您可以使用get() 获取密钥或None

就不返回任何有意义的内容而言:似乎您的操作随机崩溃而没有对该错误执行任何操作。可能会更新运行时本身以捕获任何未捕获的错误并返回更有意义的内容。在这种情况下,可能需要针对存储库的问题。

【讨论】:

  • 感谢 Markus,显然问题与 API 路由有关,现已修复。
猜你喜欢
  • 2020-09-04
  • 1970-01-01
  • 1970-01-01
  • 2023-03-21
  • 2018-05-19
  • 1970-01-01
  • 2014-06-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多