关于heap sort代码中的UnboundLocalError

下面是是heapsort的代码,在运行过程中总会出现UnboundLocalError: local variable 'new_n' referenced before assignment, 但是我又看不出来为什么出问题,特此请教希望有大佬可帮忙!


#1.heapify
def heapify_mod(n,array):
    #if have at leat 1 child,go compare
    swapped = True
    while (2*n+1)<len(array) and swapped:
        swapped = False
        #if got both child
        if (2*n+2)<= (len(array)-1):
            #if less than either
            if array[n]<array[2*n+1] or array[n]<array[2*n+2]:
                if array[2*n+2]>array[2*n+1]:
                    array[n],array[2*n+2] = array[2*n+2],array[n]
                    new_n = 2*n+2
                    swapped = True
                else:
                    array[n],array[2*n+1] = array[2*n+1],array[n]
                    new_n = 2*n+1
                    swapped = True
                    
        #if only left child        
        else:
            if array[n]<array[2*n+1]:
                array[n],array[2*n+1] = array[2*n+1],array[n]
                new_n = 2*n+1
                swapped = True
       ** n = new_n**
        print(new_n,array)
    return array

def heap(array):
    length = len(array)
    n = length//2-1
    while n>=0:
        array = heapify_mod(n,array)
        n-=1
    return array

#3.heapsort
def heapsort(array):
    heapsorted = []
    while len(array)>1:
        heaped = heap(array)
        heapsorted.append(heaped[0]) #descending
        array = heaped[1:]
    heapsorted.append(heaped[0])
    return heapsorted
array = [1, 2, 8, 7, 14, 9, 3, 10, 4, 16]
print(heapsort(array))

n = new_n(标粗的那一行)
UnboundLocalError: local variable 'new_n' referenced before assignment
之后又试着把这一行去掉,直接用n = 2*n+1,然后就没问题了,但不清楚是为什么。

大概的意思是使用了没有初始化new_n。