Why is this not working? All variables below in print statement evaluate to None.
def assign(data):
    first=middle=last=suffix=None
    sep = ','
    fields = ['last','first','middle','suffix']
    a = data
    for name in fields:
        if a: 
            a, *b = a.split(sep)
            print('intermediate: ', a, b)
            if a:
                locals()[name] = a
                a = None
                if b:
                    a = sep.join(b)
    print('first %s middle %s last %s suffix %s ', first, middle, last, suffix)
if __name__ == "__main__":
    data = 'Jon, Bon, Jovi'
    assign(data)
Edit 1
Evan asked so posting non working code below. Caveat: I fully understand now that there is no good reason to have varying variables ;)
def assign(data):
    first=middle=last=suffix=None
    sep = ','
    fields = ['last','first','middle','suffix']
    a = data
    for name in fields:
        if a: 
            a, *b = a.split(sep)
            print('intermediate: ', a, b)
            if a:
                #locals()[name] = a
                exec('%s = a' % name)
                a = None
                if b:
                    a = sep.join(b)
    print('first %s middle %s last %s suffix %s ', first, middle, last, suffix)
if __name__ == "__main__":
    data = 'Jon, Bon, Jovi'
    assign(data)
 
     
    