Как напечатать исключение в Python?

Преобразуйте свои подиндексы в линейные индексы хакерским способом

ksz = size(kDimensionalMatrix);
cksz = cumprod([ 1 ksz(1:end-1)] );
lidx = ( indexmatrix - 1 ) * cksz' + 1; #'
% lindx is now (n)x1 linear indices into kDimensionalMatrix, one index per row of indexmatrix
% access all n values:
selectedValues = kDimensionalMatrix( lindx );

Приветствия!

523
задан a_hardin 19 December 2018 в 19:51
поделиться

7 ответов

Для Python 2.6 и более поздних версий и Python 3.x:

except Exception as e: print(e)

Для Python 2.5 и более ранних версий используйте:

except Exception,e: print str(e)
895
ответ дан 22 November 2019 в 21:58
поделиться

(Я собирался оставить это как комментарий к ответу @ jldupont, но мне не хватает репутации.)

Я видел ответы, подобные ответу @ jldupont, и в других местах. FWIW, я думаю, важно отметить, что это:

except Exception as e:
    print(e)

напечатает вывод ошибки в sys.stdout по умолчанию. Более подходящим подходом к обработке ошибок в целом было бы:

except Exception as e:
    print(e, file=sys.stderr)

(Обратите внимание, что для этого нужно import sys.) Таким образом, ошибка выводится в STDERR вместо STDOUT, что позволяет правильно анализировать / перенаправлять вывод и т. Д. Я понимаю, что вопрос был строго о «печати ошибки», но, кажется, важно указать здесь лучшую практику, а не пропустить эту деталь, которая может привести к нестандартному коду для тех, кто в конечном итоге не научится лучше.

Я не использовал модуль traceback, как в ответе Cat Plus Plus, и, возможно, это лучший способ, но я подумал, что я добавлю это туда.

30
ответ дан grish 19 December 2018 в 19:51
поделиться

Python 3: logging

Вместо того, чтобы использовать основное print() функция, более гибкое logging модуль может использоваться для входа исключения.

Это может быть сделано с функцией уровня модуля logging.exception() как так:

import logging

try:
    1/0
except BaseException:
    logging.exception("An exception was thrown!")

Вывод:

ERROR:root:An exception was thrown!
Traceback (most recent call last):
  File ".../Desktop/test.py", line 4, in <module>
    1/0
ZeroDivisionError: division by zero 

Примечания: функция logging.exception() должна только быть вызвана из обработчика исключений.

<час>

Альтернативные уровни журнала

также возможно зарегистрировать исключение с другим уровнем журнала при помощи аргумента ключевого слова exc_info=True как так:

logging.debug("An exception was thrown!", exc_info=True)
logging.info("An exception was thrown!", exc_info=True)
logging.warning("An exception was thrown!", exc_info=True)
2
ответ дан 22 November 2019 в 21:58
поделиться

Повышение одной строчной ошибки может быть выполнено с помощью операторов assert, если это то, что вы хотите сделать. Это поможет вам написать статически исправляемый код и заранее проверять ошибки.

assert type(A) is type(""), "requires a string"
4
ответ дан 22 November 2019 в 21:58
поделиться

The traceback module provides methods for formatting and printing exceptions and their tracebacks, e.g. this would print exception like the default handler does:

import traceback

try:
    1/0
except Exception:
    traceback.print_exc()

Output:

Traceback (most recent call last):
  File "C:\scripts\divide_by_zero.py", line 4, in <module>
    1/0
ZeroDivisionError: division by zero
381
ответ дан 22 November 2019 в 21:58
поделиться

Если вы хотите передать строки ошибок, вот пример из Ошибки и исключения (Python 2.6)

>>> try:
...    raise Exception('spam', 'eggs')
... except Exception as inst:
...    print type(inst)     # the exception instance
...    print inst.args      # arguments stored in .args
...    print inst           # __str__ allows args to printed directly
...    x, y = inst          # __getitem__ allows args to be unpacked directly
...    print 'x =', x
...    print 'y =', y
...
<type 'exceptions.Exception'>
('spam', 'eggs')
('spam', 'eggs')
x = spam
y = eggs
49
ответ дан 22 November 2019 в 21:58
поделиться

В Python 2.6 или выше он немного чище:

except Exception as e: print(e)

В более старых версиях он все еще хорошо читается:

except Exception, e: print e
165
ответ дан 22 November 2019 в 21:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: