Найти - Пользователи
Полная версия: валится исключение, непонятно почему
Начало » Python для новичков » валится исключение, непонятно почему
1
Denisko
Всем здравствовать.
есть файло - 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:” не выводится, Только эксепшен!!
Кто нибудь сталкивался? Как это победить? или хотя бы продебажить?

ЗЫ. эксепшен точно дергается именно этот, менял строчку, а аутпуте она тоже меняется.
bw
Что за ОСь? Куда идет вывод?
Попробуй sys.stdout.flush() перед raise.
Хотя ситуация довольно странная. Возможно стандартный вывод (sys.stdout/print) кем то перехватывается и завершение приложения из-за необработанного исключения мешает ему вывести последнии строки, поступившие на стандартный вывод.

p.s. Было бы логичнее использовать исключение ValueError. Совершенно очевидно что ты ждешь исключительно числовые величины a и b, так что TypeError здесь не уместен и более того, может сбить с толку.

..bw
PooH
Проверьте отступы в файле, может среди пробелов tab затесался
Denisko
Ось - ред хат. Эта функция находится в питоновских либах, так что особо править я ее не хочу, мне бы понять из-за чего..
Оно падает не всегда, а зависит от того, что придет ей на вход. Например - на ее вход приходит откуда-то из глубин кода переменная со значением “ААААААА”. Функция падает с эксепшеном. Если же перед вызовом функции ручками проставить значение переменной в “ААААААА”, все работает как положено!!!
Есть предположение, что в строку затесались какие-то непечатаемые символы.. как это определить? вывожу всю переменную в файл - все красиво, ничего подозрительного…

табы - проверял, все нормально - функция из питоновских либов…
Ferroman
Проверить реальное содержание переменной встроенным дебаггером.
Denisko
всем спасибо. поправил конфиги (откуда берется строка) - проблема ушла. Видимо были в строке лишние непечатаемые символы. Дальше копать неохота.
sypper-pit
по правленный код лудше показывать
Denisko
я не код поправил, а конфигурационный файл откуда бралась строчка. обычный тектсовый файл.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB