Операция со списком функций Azure показать индекс вне диапазона

#python #azure #function

#python #azure #функция

Вопрос:

Я пишу некоторый скрипт для функции Azure с помощью python, который хочет обрабатывать файл csv, который был загружен в хранилище больших двоичных объектов. Кодирование, которое я тестировал, передается локально, но в функции Azure возникла ошибка.

Результат: Исключение сбоя: ошибка индекса: список индекс вне диапазона Стек: Файл «/azure-functions-host/workers/python/3.8/LINUX/X64/azure_functions_worker/dispatcher.py «, строка 355, в _handle__invocation_request call_result = await self._loop.run_in_executor( файл «/usr/local/lib/python3.8/concurrent/futures/thread.py «, строка 57, в результате выполнения = self.fn(*self.аргументы, ** self.kwargs) Файл «/azure-functions-host/workers/python/3.8/LINUX/X64/azure_functions_worker/dispatcher.py «, строка 542, в __run_sync_func возвращает файл func(**params) «/home/site/wwwroot/csvhandler/init.py «, строка 28, в основном тексте1=список 1[0]

Не совсем уверен, почему он сказал, что индекс списка вне стека диапазона, индекс списка должен начинаться с 0..

входная строка

ab, cd, ef r n12,34,56 r nff, gg, ee r n

код

 import logging
import azure.functions as func
import pandas as pd
import numpy as np

list1=[]

def main(inputblob: func.InputStream, outputblob: func.Out[str]) -> None:
    logging.info('Python Queue trigger function processed %s', inputblob.name)
    str1 = inputblob.read().decode('utf-8-sig') 
    str1 = str1.split('\r\n')   #split the string in list str1 = "ab,cd,efrn12,34,56rnff,gg,eern"
    str1 = str1[0:-1]
    for i in range(0,len(str1)):    #split the list which can be written into pandas DataFrame
        str2=str1[i].split(',')
        list1.append(str2)
    print(str1)
    
    text1=list1[0]   #verify if the element correct
    text2=list1[1]
    text3=list1[2]
    text4=list1[3]
    
    df = pd.DataFrame(list1[1:], columns=list1[0])  #create the dataframe
    
    outstr=df.to_csv(index=False)   #transfer the output to string
    outputblob.set(outstr)          #output the string in the blob
 

С другой стороны, кто-нибудь может предложить, можем ли мы просмотреть отредактированный фрейм данных как csv для хранения больших двоичных объектов? Я не могу найти здесь много информации.

Ответ №1:

Похоже, вы определили свою переменную list1 вне области действия вашей основной функции, то есть это глобальная переменная. Я полагаю, что с помощью функций Azure вам необходимо явно объявлять глобальные переменные внутри вашей основной функции, чтобы редактировать их. Из-за этого ваш список может не обновляться при добавлении элементов из вашего csv-файла, что может вызвать ошибку индекса списка. Должно быть два способа исправить это (и, возможно, другие):

  1. Определить list1 как локальную переменную внутри основной функции.
     def main(inputblob: func.InputStream, outputblob: func.Out[str]) -> None:
        logging.info('Python Queue trigger function processed %s', inputblob.name)

        list1 = []
        
        str1 = inputblob.read().decode('utf-8-sig')
 
  1. Объявите list1 как глобальную переменную, чтобы ее можно было использовать внутри вашей основной функции. (См. Документы по функциям Azure здесь).
     list1 = []

    def main(inputblob: func.InputStream, outputblob: func.Out[str]) -> None:
        logging.info('Python Queue trigger function processed %s', inputblob.name)
        
        global list1
        
        str1 = inputblob.read().decode('utf-8-sig')
 

Комментарии:

1. Привет, Уилл, спасибо за ваш вклад. Я изменил свой код, но все равно получил ошибку.