当前位置: 首页 > 知识库问答 >
问题:

尝试使用python从azure函数触发url时,出现错误,提示“未使用$return绑定返回非None值”

祁嘉言
2023-03-14

下面是代码,

import logging
import json 
import urllib.request
import urllib.parse
import azure.functions as func


def main(myblob: func.InputStream):
    logging.info(f"Python blob trigger function processed blob \n"
                 f"Name: {myblob.name}\n"
                 f"Blob Size: {myblob.length} bytes")
    response = urllib.request.urlopen("http://example.com:5000/processing")
    return {
        'statusCode': 200,
        'body': json.dumps(response.read().decode('utf-8'))
    }

错误:结果:失败异常:运行时错误:没有$return绑定的函数“abc”返回了一个非无值堆栈:文件“/azure functions host/workers/python/3.7/LINUX/X64/azure_functions_worker/dispatcher.py”,第341行,在_handle_调用_请求f'function{fi.name!r}中,没有$return绑定”。同样的代码也适用于lambda。。请帮助我调试azure函数。

function.json

{
  "scriptFile": "__init__.py",
  "bindings": [
    {
      "name": "myblob",
      "type": "blobTrigger",
      "direction": "in",
      "path": "sourcemetadata/{name}",
      "connection": "AzureWebJobsStorage"
    }
  ]
}

共有1个答案

储仲渊
2023-03-14

在Azure函数中,如果在函数app code中使用return,则表示要使用输出绑定。但是您没有在function.json中定义它。请定义它。有关更多详细信息,请参阅此处和此处

举个例子

我使用流程blob和blob触发器,并使用队列输出绑定将消息发送到azure队列

  1. function.json
{
  "scriptFile": "__init__.py",
  "bindings": [
    {
      "name": "myblob",
      "type": "blobTrigger",
      "direction": "in",
      "path": "test/{name}.csv",
      "connection": "AzureWebJobsStorage"
    },
    {
      "name": "$return",
      "direction": "out",
      "type": "queue",
      "queueName": "outqueue",
      "connection": "AzureWebJobsStorage"
    }
  ]
}
async def main(myblob: func.InputStream) :
    
    logging.info(f"Python blob trigger function processed blob \n"
                 f"Name: {myblob.name}\n")
    return "OK"
 类似资料:
  • 我正在使用Python 3.x编写一个Azure timer触发器。我已经运行了一个这样的函数。我想我知道怎么做,从JS创建一个然后删除' index.js '并创建一个run.py,但这次,当我运行我的python函数时,我总是得到一个错误,说“没有这样的文件:index.js”。我没有看到函数和“index.js”文件之间有任何联系。 有什么想法吗?

  • 我正在用Python作为后端编写一个应用程序,当我试图返回一个函数的变量时,我得到以下错误 这是我使用的代码 有人知道这个问题的答案吗?

  • 我已经审阅了Microsoft提供的关于触发器的文档。[https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-storage-blob-trigger?tabs=python][1] 事实上,在Azure函数中使用参数允许我们检索blob和一些属性(),我们还可以使用函数读取字节,但是我们如何将字节转换为

  • 问题内容: 我只是在创建一个用于检查对象数组中某个值的函数,但是由于某种原因,它一直在返回。这是为什么? 问题答案: 在函数中,您是从传递给的函数返回的,而不是从返回的。 您可以这样修改它: 但这会迭代所有元素,即使立即找到该项目也是如此。这就是为什么最好使用一个简单的循环: 请注意,我还修改了您的代码以返回值,而不是键。我想这就是意图。您可能还对另一个迭代函数感到困惑:传递给forEach的回调

  • 到目前为止,我们创建的函数都只是对传入的数据进行了处理,处理完了就结束。但实际上,在某些场景中,我们还需函数将处理的结果反馈回来,就好像主管向下级员工下达命令,让其去打印文件,员工打印好文件后并没有完成任务,还需要将文件交给主管。 Python中,用 def 语句创建函数时,可以用 return 语句指定应该返回的值,该返回值可以是任意类型。需要注意的是,return 语句在同一函数中可以出现多次

  • 我试图编写一个函数,使用闭包验证给定的集合。该函数获取集合的所有权,对内容进行迭代,如果没有找到无效的项,则返回集合的所有权。这就是为什么它可以这样使用(而不需要为创建一个temp):