Форум сайта python.su
Всем здравствовать.
есть файло - binascii.py, в нем функция a2b_hex(t)
Слегка патченная, имеет вот такой код:
for a, b in pairs_gen(t):
if a < 0 or b < 0:
print “QWQWWQWQWQ”
print “exception a = %d b = %d” % (a, b)
raise TypeError('Non-hexadecimal digit found')
else:
print “AB OK”
Интересные вещи происходят - проходим по всему циклу, везде печатаем “AB OK”, в самом конце цикла дергается эксепшен “TypeError”, но “QWQWWQWQWQ” не печатается!! вообще никакая диагностика из условия “if a < 0 or b < 0:” не выводится, Только эксепшен!!
Кто нибудь сталкивался? Как это победить? или хотя бы продебажить?
ЗЫ. эксепшен точно дергается именно этот, менял строчку, а аутпуте она тоже меняется.
Офлайн
Что за ОСь? Куда идет вывод?
Попробуй sys.stdout.flush() перед raise.
Хотя ситуация довольно странная. Возможно стандартный вывод (sys.stdout/print) кем то перехватывается и завершение приложения из-за необработанного исключения мешает ему вывести последнии строки, поступившие на стандартный вывод.
p.s. Было бы логичнее использовать исключение ValueError. Совершенно очевидно что ты ждешь исключительно числовые величины a и b, так что TypeError здесь не уместен и более того, может сбить с толку.
..bw
Офлайн
Проверьте отступы в файле, может среди пробелов tab затесался
Офлайн
Ось - ред хат. Эта функция находится в питоновских либах, так что особо править я ее не хочу, мне бы понять из-за чего..
Оно падает не всегда, а зависит от того, что придет ей на вход. Например - на ее вход приходит откуда-то из глубин кода переменная со значением “ААААААА”. Функция падает с эксепшеном. Если же перед вызовом функции ручками проставить значение переменной в “ААААААА”, все работает как положено!!!
Есть предположение, что в строку затесались какие-то непечатаемые символы.. как это определить? вывожу всю переменную в файл - все красиво, ничего подозрительного…
табы - проверял, все нормально - функция из питоновских либов…
Отредактировано (Июнь 23, 2009 03:04:36)
Офлайн
Проверить реальное содержание переменной встроенным дебаггером.
Офлайн
всем спасибо. поправил конфиги (откуда берется строка) - проблема ушла. Видимо были в строке лишние непечатаемые символы. Дальше копать неохота.
Офлайн
по правленный код лудше показывать
Офлайн
я не код поправил, а конфигурационный файл откуда бралась строчка. обычный тектсовый файл.
Офлайн