Python Forum

Full Version: Trouble with Name not being defined - don't know why?
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Hi Folks -

I have the following code:
#!/usr/bin/python
# -*- coding: utf-8 -*-

import requests
import sys
import json
import datetime
import smtplib
import time
from pprint import pprint
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText


def sendemail(email, data):
    ret = ''
    try:
        me = '[email protected]'  # You can update the helpdesk mail address.
        my_password = 'Password'  # Mailbox Password
        you = email
        msg = MIMEMultipart('alternative')
        msg['Subject'] = 'IMMEDIATE ACTION REQUIRED: Unassigned Requests (Orphans)'
        msg['From'] = me
        msg['To'] = email
        msg['X-Priority'] = '2'

        html = data
        part2 = MIMEText(html, 'html')

        msg.attach(part2)

        s = smtplib.SMTP_SSL('server.net')  # Mail Server Host name
        s.login(me, my_password)

        s.sendmail(me, you, msg.as_string())
        s.quit()
        ret = 'success'
    except smtplib.SMTPException as err:
        print ('Unable to Send emails : ', err)
        ret = 'failure'
    return ret


reportJson = str(sys.argv[1])
json_data = open(reportJson).read()
data = json.loads(json_data)
counter = 0
techEmail = ''
message = \
    'Attention Pod Leads, <br><br>' + \
    'Below is a list of tickets that do not have a Site, Request Type, Technician and other required field values. <br><br>' + \
    'Please review, triage if you can and/or forward along to the necessary Pod member. <br><br>' + \
    'Thank you, <br>' + \
    'PSRS Administrator' + \
    '<br><br>' + \
    """<html><html><head><style>table {font-family: arial, sans-serif;border-collapse: collapse;width: 100%;}td, th {border: 1px solid #dddddd;text-align: left;padding: 8px;}tr:nth-child(even) {background-color: #dddddd;}</style></head><body><table><tr><th>RequestID</th><th>Site</th><th>RequestType</th><th>Status</th><th>Requester</th><th>Subject</th></tr>"""
length = len(data)

for dObj in data:
    requestID = dObj.get('requestid')
    site = dObj.get('site')
    RequestType = dObj.get('RequestType')
    status = dObj.get('status')
    requester = dObj.get('requester')
    subject = dObj.get('subject')
    email = '[email protected]'
    if RequestType is None:
        RequestType = 'Not Assigned'
    if counter == 0:
        techEmail = email
    counter += 1
    if techEmail == email:
        message += \
            """<tr><td>""" \
            + requestID + """</td><td>""" + site + """</td><td>""" + RequestType + """</td><td>""" \
            + status + """</td><td>""" + requester + """</td><td>""" \
            + subject + """</td></tr>"""
        if counter == length:
            message += '</table></body></html>'
            r = sendemail(techEmail, message)
            print(techEmail)
    else:
        message += '</table></body></html>'
        r = sendemail(techEmail, message)
        print(techEmail)
        techEmail = email
        message = \
            """<html><head><style>table {font-family: arial, sans-serif;border-collapse: collapse;width: 100%;}td, th {border: 1px solid #dddddd;text-align: left;padding: 8px;}tr:nth-child(even) {background-color: #dddddd;}</style></head><body><table><tr><th>RequestID</th><th>Site</th><th>RequestType</th><th>Status</th><th>Requester</th><th>Subject</th></tr><tr><td>""" \
            + requestID + """</td><td>""" + site + """</td><td>""" + RequestType + """</td><td>""" \
            + status + """</td><td>""" + requester + """</td><td>""" \
            + subject + """</td></tr>"""
        if counter == length:
            message = \
                """<html><head><style>table {font-family: arial, sans-serif;border-collapse: collapse;width: 100%;}td, th {border: 1px solid #dddddd;text-align: left;padding: 8px;}tr:nth-child(even) {background-color: #dddddd;}</style></head><body><table><tr><th>RequestID</th><th>Site</th><th>RequestType</th><th>Status</th><th>Requester</th><th>Subject</th></tr><tr><td>""" \
                + requestID + """</td><td>""" + site + """</td><td>""" + RequestType + """</td><td>""" \
                + status + """</td><td>""" + requester + """</td><td>""" \
                + subject + """</td></tr></table></body></html>"""
            r = sendemail(techEmail, message)
            print(techEmail)

if(r=="success"):
	print("Reports sent successfully to the respective techs")
else:
	print("Unable to send reports")
I included an attachment which outlines my error. It's saying 'r' is not defined. I have other scripts setup in similar format with no issues. What could the problem be here?
r is only ever assigned in certain conditional areas, but not all. If you never enter any of those blocks, r is never assigned and when you reach the test, it will fail.

As an example, if data were empty, the big for loop would never run and the next thing to be encountered would be the r test (which would error out).