У меня есть нормально структурированная программа Python с операторами импорта, определениями классов, другими подпрограммами и некоторыми «главными» операторами, которые вызывают методы в классах (в этом порядке). операторы печати после импорта печатает «ОК»Порядок выполнения Python-модуля
Python 2.7.2
Я получаю NameError в методе класса.
print >> common, ...
NameError: 'common' is not defined
common
используется ранее в том же способе, но более ранние ссылки не повод без ошибок.
common
используется во многих методах - перемещение этого метода физически не оказывает никакого эффекта: ошибка по-прежнему находится на одной линии в этом методе.
Ошибка возникает до метод вызывается и перед выполнением любого из «основных» операторов. Помещение возврата в качестве первого исполняемого оператора в методе не имеет никакого эффекта. Это все, по-видимому, происходит во время определения класса.
Если я прокомментирую инструкции print >> common
, я получаю другой NameError в том же методе.
Я понятия не имею, как я могу получить NameError внутри метода в 'время определения'.
Любые идеи? Этот метод приведен ниже:
x = z ** 2 ниже Предполагаемый для создания NameError: нет z. Операция печати сразу после того, как все определения функций не выполняются.
"""code below"""
@classmethod
def show_role_map(cls):
"""show jobs within roles, with total days, with percents of totals"""
return
raise ZeroDivisionError
return
print >> common, "xyzzy"
x = z ** 2
p = Performance("Traveler: show_role_map")
print "\tshow_role_map"
roles = cls.role_map.keys()
roles.sort()
header ("Qualitative Role Map")
role_totals = collections.defaultdict(float)
job_totals = collections.defaultdict(float)
for name in Traveler.roster:
trav = Traveler.roster[name]
for day in trav.roles:
frac = 1.0/len(trav.roles[day])
for role in trav.roles[day]:
role_totals[role] += frac
for day in trav.jobs:
frac = 1.0/len(trav.jobs[day])
for job in trav.jobs[day]:
job_totals[job] += frac
role_total = sum(role_totals.values())
job_total = sum(job_totals.values())
assert abs(role_total - job_total) <= 1e-6
print >> common, "Total Role days =", role_total
print >> common, "Total Job days =", job_total
print >> common
for role in roles:
if role_totals[role] == 0: continue
print >> common, "\t%12s %51.1f %12s %12.3f" %\
(role, role_totals[role], \
"", 100.0 * role_totals[role]/role_total)
jobs = list(cls.role_map[role])
jobs.sort (key = lambda x: (job_totals[x], x), reverse = True)
for index, job in enumerate(jobs, 1):
if job_totals[job] == 0: continue
print role, job, role_totals[role], job_totals[job]
print >> common, "\t\t%6d. %35s %12.1f % 12.3f %12.3f" % \
(index, job, job_totals[job], \
100.0 * job_totals[job]/role_totals[role],
100.0 * job_totals[job]/role_total)
print >> common
print >> common, "\n", "_" * 60, "\n" #--ERROR OCCURS FOR THIS LINE ****************
print >> common, "\nRoles in Total Tripday order\n"
roles = role_totals.keys()
roles.sort (order = lambda x: (role_totals[x], x), reverse = True)
for index, role, in enumerate(roles,1):
print >> common, "%6d. %15s %12.1f %12.3f" % \
(index, role, role_totals[role], \
100.0 * role_totals[role]/role_total)
print >> common, "\n", "_" * 60, "\n"
print >> common, "\nDetailed Trip Roles in Total Tripday order"
jobs = job_totals.keys()
jobs.sort (key = lambda x: (job_totals[x], x), reverse = True)
for index, job in jobs:
print >> common, "%6d. %35s %12.1f %12.3f" % \
(index, job, job_totals[job], 100.0 * job_totals[job]/job_total)
p.close()
Я понимаю вопрос. Но без какого-либо кода очень сложно сказать, где ваш код отличается от того, что вы ожидаете. Отправьте свой код – inspectorG4dget
Пожалуйста, включите весь сегмент (метод) кода, с которым вы столкнулись. –
Не стесняйтесь, если вы не разместите свой код.Кроме того, вы можете рассказать нам, какую версию используемого python вы используете (хотя это не обязательно нужно некоторое время). – inspectorG4dget