Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
0 / 0 / 0
Регистрация: 16.02.2012
Сообщений: 51

Как в отладчике просмотреть содержимое списка?

06.12.2013, 22:50. Показов 2963. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Python 2.7.2. Имеется скрипт, считывающий данные из внешних файлов и определенным образом их обрабатывающий, отлаженый и часто использованный, при этом при обработке вполне валидных для него по структуре файлов, при работе с некоторыми из них выдается такая ошибка.
Python
1
UnboundLocalError: local variable referenced before assignment
Это при том что выдается она, как это выглядит, произвольно — для других файлов аналогичной структуры все работает, тестировал функции по отдельности — все работает корректно. Если попробовать огласить «проблемную» переменную принудительно глобальной, находит следующую с такой же ошибкой.
Существуют ли какие-то особенности, которые могли бы привести к появлению сообщения о такой ошибке, когда дело на самом деле в другом? Посоветуйте пожалуйста, как можно еще подиагностировать работу скрипта в данной ситуации. Есть ли способ промониторить все значения переменных по ходу выполнения скрипта (создать какой-то лог)?

Добавлено через 10 минут
upd
Если обойти проблемы с локальными переменными начинает также неадекватно (что подтверждается тестированием функций по отдельности и корректной работой с другим файлами) выдавать list index out of range

Добавлено через 7 минут
Python
1
2
3
4
5
6
7
8
9
10
11
12
[['GROUP', 'FLUX', 'RAD-DIFF', 'AX-DIFF', 'TOT-DIFF', 'REMOVAL', 'ABSORPTION', 'NU-FISS', 'FISS', 'TRANSP', 'TOTAL'], ['1', '3.977888E+01', '1.425138E+00', '1.425138E+00', '1.425138E+00', '1.331315E-02', '1.207110E-02', '3.878784E-03', '1.419409E-03', '2.338955E-01', '2.932495E-01'], ['2', '5.682828E+00', '3.718616E-01', '3.718616E-01', '3.718616E-01', '1.690244E-03', '9.147231E-02', '9.343243E-02', '3.425082E-02', '8.963909E-01', '9.934033E-01'], ['0SCATTERING', 'MATRIX', '(SELFSCATTERING', 'UNCORRECTED)', '+', 'SELFSCATTERING', 'CORRECTED', 'BY', 'TRANSP', 'TOTAL'], ['1', '2'], ['1', '2.678652E-01', '1.331315E-02', '2.085112E-01']]
[]
Traceback (most recent call last):
  File "…", line 227, in <module>
    fun1(root, fatype, cr_stance, wt_cases, wt_xlist, wt_outfn)
  File "…", line 150, in b_process
    reslist.append(preprocess(root, burnup, fatype, cr_stance, cases, x_list))
  File "…", line 137, in fun2
    reslist1.append(derline(seek_get(fn, spatt, count), get_Ef(fn, efpatt)))
  File "…", line 55, in derline
    ml1, ml2, ml3 = matrix[1], matrix[2], matrix[5]
IndexError: list index out of range
вот, собственно, лог консоли, явно видно что укладываются индексы в рейндж и существуют элементы списка с такими индексами. Как понимать поведение скрипта в такой ситуации?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.12.2013, 22:50
Ответы с готовыми решениями:

Просмотреть порядок вызова функций в отладчике vs 2013
Собственно, вопрос - как? У меня есть проект на си, с огромным количеством файлов и функций. Нужно посмотреть что в каком порядке...

В отладчике невозможно просмотреть значения свойств некоторых объектов
Доброго времени суток. Столкнулся с проблемой невозможности просмотра значений свойств объектов в отладке. При добавлении оного в...

Разработать программу, вычисляющую заданное выражение. Просмотреть в отладчике.
Разработать программу, вычисляющую заданное выражение. Просмотреть в отладчике и зафиксировать в отчете ход выполнения вычислений...

23
0 / 0 / 0
Регистрация: 16.02.2012
Сообщений: 51
08.12.2013, 22:13  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от accept Посмотреть сообщение
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def seek_get(fname, spatt, count):
    matrix, found, remaining = [], False, count
    with open(fname, 'r') as inp:
        for line in inp:
            if found:
                print 'remaining:', remaining
                if remaining == 0:
                    break
                print 'append <0>'.format(line)
                raw_input()
                matrix.append(line.split())
                remaining -= 1
            if line.startswith(spatt):
                found = True
    return matrix
Добавлено через 29 секунд

сначала нужно локализовать баг
Ну и что мы получаем? То же, что и имели — выводится соответствующее количеству отработанных файлов раз сообщение «append <0>» ну а затем когда приходит черед того файла на котором все почему-то прерывается получаем list index out of range
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
08.12.2013, 22:15
Цитата Сообщение от you_fail_me Посмотреть сообщение
append <0>
поменял там, нужны фигурные скобки
0
0 / 0 / 0
Регистрация: 16.02.2012
Сообщений: 51
08.12.2013, 22:20  [ТС]
Цитата Сообщение от accept Посмотреть сообщение
поменял там, нужны фигурные скобки
В таком случае получаем:
Code
1
2
append < GROUP   FLUX       RAD-DIFF     AX-DIFF     TOT-DIFF   REMOVAL    ABSORPTION    NU-FISS       FISS   TRANSP     TOTAL
>
Зачем там raw_input?
Без raw_input получаем:
Кликните здесь для просмотра всего текста
append < GROUP FLUX RAD-DIFF AX-DIFF TOT-DIFF REMOVAL ABSORPTION NU-FISS FISS TRANSP TOTAL
>
append < 1 3.955277E+01 1.434904E+00 1.434904E+00 1.434904E+00 1.409580E-02 1.142770E-02 7.130915E-03 2.810822E-03 2.323036E-01 2.900501E-01
>
append < 2 4.815122E+00 3.798545E-01 3.798545E-01 3.798545E-01 2.091782E-03 1.138068E-01 1.576586E-01 6.469695E-02 8.775290E-01 9.889541E-01
>
append <0SCATTERING MATRIX (SELFSCATTERING UNCORRECTED) + SELFSCATTERING CORRECTED BY TRANSP TOTAL
>
append < 1 2
>
append < 1 2.645266E-01 1.409580E-02 2.067801E-01
>

, повторяющееся количество раз, соответствующее количеству успешно обработанных файлов (с разными значениями, соответствующими конкретным файлам, разумеется).
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
08.12.2013, 22:28
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
def seek_get(fname, spatt, count):
    matrix, found, remaining = [], False, count
    with open(fname, 'r') as inp:
        print 'file:', fname
        for line in inp:
            print '<{0}>'.format(line)
            if found:
                #print 'remaining:', remaining
                if remaining == 0:
                    break
                #print 'append <{0}>'.format(line)
                #raw_input()
                matrix.append(line.split())
                remaining -= 1
            if line.startswith(spatt):
                print 'found'
                raw_input()
                found = True
    return matrix
Добавлено через 2 минуты
Цитата Сообщение от you_fail_me Посмотреть сообщение
Зачем там raw_input?
их легче считать, не всегда удобно считать с экрана
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.12.2013, 22:28
Помогаю со студенческими работами здесь

Как просмотреть содержимое БД приложения
Здравствуйте! В приложении есть БД, которая прописывается в самом коде (создание и т.п). Можно ли как нибудь на нее посмотреть отдельным...

Как просмотреть содержимое директории?
Здравствуйте, подскажите пожалуйста, как в Lazarus просмотреть все файлы, имеющиеся в директории включая подпапки, чтобы вывести их,...

Как просмотреть содержимое регистров
Начал изучать NASM под линукс подскажите пожалуйстака как просматривать содержимое регистров и выполнять программу пошагово

Как в VBA просмотреть содержимое папок?
Как в VBA просмотреть содержимое папок, типа dirlistbox есть что-нибудь??

Как просмотреть содержимое параметров функции main?
Здравствуйте. Честно, повсюду на этом форуме и не только искал информацию о параметрах функции main в C++/CLI. Почти ничего не нашел, к...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
24
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru