Преобразуйте свои подиндексы в линейные индексы хакерским способом
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 );
Приветствия!
Для Python 2.6 и более поздних версий и Python 3.x:
except Exception as e: print(e)
Для Python 2.5 и более ранних версий используйте:
except Exception,e: print str(e)
(Я собирался оставить это как комментарий к ответу @ 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, и, возможно, это лучший способ, но я подумал, что я добавлю это туда.
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)
Повышение одной строчной ошибки может быть выполнено с помощью операторов assert, если это то, что вы хотите сделать. Это поможет вам написать статически исправляемый код и заранее проверять ошибки.
assert type(A) is type(""), "requires a string"
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
Если вы хотите передать строки ошибок, вот пример из Ошибки и исключения (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
В Python 2.6 или выше он немного чище:
except Exception as e: print(e)
В более старых версиях он все еще хорошо читается:
except Exception, e: print e