Я бы согласился со сказанным выше: предположим, что size
относится к правильному типу, пусть будет сгенерировано исключение (или будет возвращена ошибка), если это не так.
Тем не менее, есть полезный шаблон, когда вы имеете дело с вводом, который может вызвать исключение: оборачивать любые исключения, вызванные вводом, чтобы они включали ввод. Например, так вы получите:
ParseError: while parsing 'number = foo': ValueError: invalid literal for int() with base 10: 'foo'
Код выглядит примерно так:
try:
parse(input)
catch Exception, e:
raise ParseError("while parsing %r: %r" %(input, e)), None, sys.exc_info()[2]
Третий аргумент raise
будет использовать исходную трассировку, поэтому трассировка стека будет указывать на строку, которая фактически вызвала ошибку (например, size = int(value)
), а не на вызов raise
.