Reference: Python 3: UnboundLocalError: local variable referenced before assignment
I tried passing parsed_upd as argument and also tried defining as global, I'm still getting the same error
parsed = dict()
def func1(str1):
    global parsed
    header=str1.split('[',1)[0]
    body=str1.split('[',1)[1]
    header_parts=header.split(' ')
    parsed['timeStamp']=header_parts[1]
    parsed['eventDate']=header_parts[1].split('T')[0]
    parsed['eventType']=header_parts[5].upper()
    body_str=body[:]
    esc=0
    start=0
    end=0
    body_parts=list()
    while True:
        try:
          esc = body_str.index('\\]', start)
        except:
          esc = 0
        try:
           start = start+1 if body_str[start:-1][0]=='[' else start
           end = body_str.index(']', start)
        except:
           end = 0
           if (esc > 0 and esc != end):
             continue
        if (end > 0):
           body_parts.append(body_str[start:end])
           start = end + 1
        if (end == 0):
            break
    if (not check(body_parts, 'guId=')):
         parsed['eventType'] = 'ERROR_' + header_parts[5].upper()
    list_attr = list()
    for item in body_parts:
        list_attributes = [attrib_dict.strip('"') for attrib in item.split('" ') for attrib_dict in attrib.split('="', 1)]
        m = re.search(r'([a-zA-Z]*)(@)([0-9]*)\s+(.+)', list_attributes[0])
        if m:
            if (not m.group(1).lower().startswith('requestcontext')):
                parsed['eventName'] = m.group(1)
            list_attributes[0] = m.group(4)
        else:
            print('Empty list_attributes : {}'.format(list_attributes[0]))
            list_attributes.pop(0)
        list_attr += list_attributes
        parsed_upd = merge(parsed, dict(zip(*[iter(list_attr)] * 2)))
    print(parsed_upd)
    return parsed_upd
Getting the error in the return statement. Using Python version 2.7.5
