I have tried countless times to debug the following function, as upon execution, the entire program crashes, with
Process finished with exit code 0
From what I can see from the function, their is no explicit "kill program" command used. I'm just not sure what is wrong with the function, and neither is the IDE.
I'm just asking for a second pair of eyes.
def CreateScoutCensus():
    #Create Word Document
    doc = docx.Document()
    run = doc.add_paragraph().add_run()
    # Apply Style
    Tstyle = doc.styles['Normal']
    font = Tstyle.font
    font.name = "Nunito Sans"
    font.size = Pt(48)
    Title = doc.add_paragraph()
    TRun = Title.add_run("Scout Census")
    TRun.bold = True
    doc.add_picture('Scouts_Logo_Stack_Black.png', width=Inches(4.0))
    Hstyle = doc.styles['Normal']
    Headfont = Hstyle.font
    Headfont.name = "Nunito Sans"
    Headfont.size = Pt(22)
    Heading = doc.add_paragraph("Statistics:")
    Heading.bold = True
    Stats = doc.add_paragraph()
    #Create bullet point list
    Stats.style = 'List Bullet'
    # Gather Stats
    #Obtain the total number of USERS in the system
    mycursor.execute("SELECT * FROM usercredentials")
    AllUsers = mycursor.fetchall()
    NoOfUsers = 0
    for i in AllUsers:
        NoOfUsers = NoOfUsers + 1
    #Obtain the number of SCOUTS in the system
    mycursor.execute("SELECT * FROM scoutinfo")
    AllScouts = mycursor.fetchall()
    NoOfScouts = 0
    for j in AllScouts:
        NoOfScouts = NoOfScouts + 1
    #Obtain the number of PARENTS in the system
    mycursor.execute("SELECT * FROM parentinfo")
    AllParents = mycursor.fetchall()
    NoOfParents = 0
    for j in AllParents:
        NoOfParents = NoOfParents + 1
    #Obtain the number of YOUNG LEADERS in the system
    mycursor.execute("SELECT * FROM youngleaderinfo")
    AllYoungLeader = mycursor.fetchall()
    NoOfYL = 0
    for j in AllYoungLeader:
        NoOfYL = NoOfYL + 1
    #Obtain the number of LEADERS in the system
    mycursor.execute("SELECT * FROM leaderinfo")
    AllLeaders = mycursor.fetchall()
    NoOfLeaders = 0
    for j in AllLeaders:
        NoOfLeaders = NoOfLeaders + 1
    #Obtain all Ethnicitys from scoutinfo in database
    mycursor.execute("SELECT Ethnicity FROM scoutinfo")
    AllEthnicity = mycursor.fetchall()
    NoOfWE = 0
    NoOfWW = 0
    NoOfWS = 0
    NoOfWNI = 0
    NoOfWB = 0
    NoOfWI = 0
    NoOfWG = 0
    NoOfWO = 0
    NoOfWBC = 0
    NoOfWBA = 0
    NoOfWA = 0
    NoOfI = 0
    NoOfP = 0
    NoOfB = 0
    NoOfC = 0
    NoOfA = 0
    NoOfCA = 0
    NoOfAR = 0
    NoOfO = 0
    NoOfCAR = 0
    #Increment appropriate variable for each instance of ethnicity
    for j in AllEthnicity:
        if j[0] == ("White: English"):
            NoOfWE = NoOfWE + 1
        if j[0] == ("White: Welsh"):
            NoOfWW = NoOfWW + 1
        if j[0] == ("White: Scottish"):
            NoOfWS = NoOfWS + 1
        if j[0] == ("White: Northern Irish"):
            NoOfWNI = NoOfWNI + 1
        if j[0] == ("White: British"):
            NoOfWB = NoOfWB + 1
        if j[0] == ("White: Irish"):
            NoOfWI = NoOfWI + 1
        if j[0] == ("White: Gypsy"):
            NoOfWG = NoOfWG + 1
        if j[0] == ("White: Other"):
            NoOfWO = NoOfWO + 1
        if j[0] == ("White and Black: Caribbean"):
            NoOfWBC = NoOfWBC + 1
        if j[0] == ("White and Black: African"):
            NoOfWBA = NoOfWBA + 1
        if j[0] == ("White and Asain"):
            NoOfWA = NoOfWA + 1
        if j[0] == ("Indian"):
            NoOfI = NoOfI + 1
        if j[0] == ("Pakistani"):
            NoOfP = NoOfP + 1
        if j[0] == ("Bangladeshi"):
            NoOfB = NoOfB + 1
        if j[0] == ("Chinese"):
            NoOfC = NoOfC + 1
        if j[0] == ("African"):
            NoOfA = NoOfA + 1
        if j[0] == ("Arab"):
            NoOfAR = NoOfAR + 1
        if j[0] == ("Caribbean"):
            NoOfCAR = NoOfCAR + 1
        if j[0] == ("Other"):
            NoOfO = NoOfO + 1
    # Defining Labels For Pie Chart
    Labels = ["White: English", "White: Welsh", "White: Scottish", "White: Northern Irish", "White: British",
          "White: Irish", "White: Gypsy", "White: Other", "White and Black: Caribbean", "White and Black: African",
          "White and Asain", "Indian", "Pakistani", "Bangladeshi", "Chinese", "African", "Caribbean", "Arab",
          "Other"]
    # Defining Data Variables For Each Slice Of The Pie Chart
    Slices = [NoOfWE, NoOfWW, NoOfWS, NoOfWNI, NoOfWB, NoOfWI, NoOfWG, NoOfWO, NoOfWBC, NoOfWBA, NoOfWA, NoOfI, NoOfP,
          NoOfB, NoOfC, NoOfA, NoOfCA, NoOfCAR, NoOfAR, NoOfO]
    #Removal of any Labels and Slices of Ethnicities not present
    if NoOfWE == 0:
        Labels.remove("White: English")
        Slices.remove(NoOfWE)
    if NoOfWW == 0:
        Labels.remove("White: Welsh")
        Slices.remove(NoOfWW)
    if NoOfWS == 0:
        Labels.remove("White: Scottish")
        Slices.remove(NoOfWS)
    if NoOfWNI == 0:
        Labels.remove("White: Northern Irish")
        Slices.remove(NoOfWNI)
    if NoOfWB == 0:
        Labels.remove("White: British")
        Slices.remove(NoOfWB)
    if NoOfWI == 0:
        Labels.remove("White: Irish")
        Slices.remove(NoOfWI)
    if NoOfWG == 0:
        Labels.remove("White: Gypsy")
        Slices.remove(NoOfWG)
    if NoOfWO == 0:
        Labels.remove("White: Other")
        Slices.remove(NoOfWO)
    if NoOfWBC == 0:
        Labels.remove("White and Black: Caribbean")
        Slices.remove(NoOfWBC)
    if NoOfWBA == 0:
        Labels.remove("White and Black: African")
        Slices.remove(NoOfWBA)
    if NoOfWA == 0:
        Labels.remove("White and Asain")
        Slices.remove(NoOfWA)
    if NoOfI == 0:
        Labels.remove("Indian")
        Slices.remove(NoOfI)
    if NoOfP == 0:
        Labels.remove("Pakistani")
        Slices.remove(NoOfP)
    if NoOfB == 0:
        Labels.remove("Bangladeshi")
        Slices.remove(NoOfB)
    if NoOfC == 0:
        Labels.remove("Chinese")
        Slices.remove(NoOfC)
    if NoOfA == 0:
        Labels.remove("African")
        Slices.remove(NoOfA)
    if NoOfCAR == 0:
        Labels.remove("Caribbean")
        Slices.remove(NoOfCAR)
    if NoOfAR == 0:
        Labels.remove("Arab")
        Slices.remove(NoOfAR)
    if NoOfO == 0:
        Labels.remove("Other")
        Slices.remove(NoOfO)
    Slices.remove(0)
    # Create Pie Chart Of Ethnicitys
    Cols = ['g', 'y', 'c', 'm', 'r', 'b']
    # Plot
    plt.pie(Slices, labels=Labels, colors=Cols,
        autopct='%1.1f%%', shadow=True, startangle=140)
    plt.axis('equal')
    plt.title("Ethnicity Scouts")
    EPieChart = plt.gcf()
    #Save pie chart
    pylab.savefig("EthnicityPieChart.png", bbox_inches='tight')
    EPieChart.savefig("EthnicityPieChart.png", bbox_inches='tight')
    #Write data to Scout Census doc
    StatOne = Stats.add_run("No Of Users: " + str((NoOfUsers)))
    StatTwo = Stats.add_run("\nNo Of Scouts: " + str((NoOfScouts)))
    StatThree = Stats.add_run("\nNo Of Parents: " + str((NoOfParents)))
    StatFour = Stats.add_run("\nNo Of Young Leaders: " + str((NoOfYL)))
    StatFive = Stats.add_run("\nNo Of Leaders: " + str((NoOfLeaders)))
    #Add piechart to doc
    doc.add_picture('EthnicityPieChart.png', width=Inches(4.0))
    #Save document
    doc.save("ScoutCensus.docx")
    plt.clf()
    #Gender Pie Chart
    # Defining Labels For Pie Chart
    LabelsG = ["Male","Female","Other"]
    # Defining Data Variables For Each Slice Of The Pie Chart
    NoOfMale=0
    NoOfFemale=0
    NoOfOther=0
    Male=("Male")
    Female=("Female")
    Other=("Other")
    #Count Number Of Males
    GetMalesSQL="SELECT COUNT(*) FROM scoutinfo WHERE gender=%s"
    mycursor.execute(GetMalesSQL,(Male,))
    myresults=mycursor.fetchone()
    NoOfMale=myresults[0]
    #Count Number Of Females
    GetFemaleSQL="SELECT COUNT(*) FROM scoutinfo WHERE gender=%s"
    mycursor.execute(GetMalesSQL,(Female,))
    myresults=mycursor.fetchone()
    NoOfFemale=myresults[0]
    #Count Number Of Others
    GetOtherSQL="SELECT COUNT(*) FROM scoutinfo WHERE gender=%s"
    mycursor.execute(GetMalesSQL,(Other,))
    myresults=mycursor.fetchone()
    NoOfOther=myresults[0]
    SlicesG = []
    SlicesG = [NoOfMale,NoOfFemale,NoOfOther]
    #Remove any slices with no data
    if NoOfMale==0:
        SlicesG.remove(0)
        LabelsG.remove("Male")
    if NoOfFemale==0:
        SlicesG.remove(0)
        LabelsG.remove("Female")
    if NoOfOther==0:
        SlicesG.remove(0)
        LabelsG.remove("Other")
    # Create Pie Chart Of Gender
    Cols = ['b','r','g']
    # Plot
    plt.pie(SlicesG, labels=LabelsG, colors=Cols,
        autopct='%1.1f%%', shadow=True, startangle=140)
    plt.axis('equal')
    plt.title("Gender Diversity Of Scouts")
    GPieChart = plt.gcf()
    pylab.savefig("GenderPieChart.png", bbox_inches='tight')
    GPieChart.savefig("GenderPieChart.png", bbox_inches='tight')
    doc.add_picture('GenderPieChart.png', width=Inches(4.0))
    doc.save("ScoutCensus.docx")
    plt.close(GPieChart)
    #Age BarChart
    #Range of appropriate age values for SCOUTS
    AgeDef=[9,10,11,12,13,14,15,16]
    Values=[]
    Ages=[]
    y_pos= np.arange(len(AgeDef))
    #Count number of Scouts of certain age
    mycursor.execute("SELECT age FROM scoutinfo")
    myresults=mycursor.fetchall()
    for i in myresults:
        Ages.append(int(i[0]))
    NoOf9=Ages.count(9)
    NoOf10 = Ages.count(10)
    NoOf11 = Ages.count(11)
    NoOf12 = Ages.count(12)
    NoOf13 = Ages.count(13)
    NoOf14 = Ages.count(14)
    NoOf15 = Ages.count(15)
    NoOf16 = Ages.count(16)
    Values=[NoOf9,NoOf10,NoOf11,NoOf12,NoOf13,NoOf14,NoOf15,NoOf16]
yint = range(min(Values), math.ceil(max(Values)) + 1)
    #Plot graph
    plt.bar(y_pos, Values, align="center", alpha=0.5)
    plt.yticks(yint)
    plt.xticks(y_pos,AgeDef)
    plt.ylabel("No Of Scouts Of Age")
    plt.xlabel("Age")
    plt.title("Number Of Scouts By Age")
    ScoutAgeBarChart = plt.gcf()
    pylab.savefig("ScoutAgeBarChart.png", bbox_inches='tight')
    ScoutAgeBarChart.savefig("ScoutAgeBarChart.png", bbox_inches='tight')
    #Save image to document
    doc.add_picture('ScoutAgeBarChart.png', width=Inches(4.0))
    doc.save("ScoutCensus.docx")
    tk.messagebox.showinfo("Success!","Scout Census Created!")
    os.system("start ScoutCensus.docx")
    return
