Зарегистрируйте все ошибки подключиться с консоли или зарегистрировать на сайте Django

Попробуйте:

int[] array = "1234567890".ToCharArray().Select(c => int.Parse(c.ToString())).ToArray();

Вы можете опустить вызов метода ToCharArray, поскольку string уже является набором символов:)

15
задан Community 23 May 2017 в 10:29
поделиться

5 ответов

Это - немного экстремального значения, но для отладки целей, можно включить DEBUG_PROPAGATE_EXCEPTIONS установка. Это позволит Вам настраивать свою собственную обработку ошибок. Самый легкий способ настроить сказал, что обработка ошибок должна будет переопределить sys.excepthook. Это завершит Ваше приложение, но оно будет работать. Могут быть вещи, которые можно сделать, чтобы заставить это не уничтожить приложение, но это будет зависеть, на какой платформе Вы развертываете это для. Во всяком случае никогда не используйте это в производстве!

Для производства Вы в значительной степени оказываетесь перед необходимостью иметь в распоряжении обширную обработку ошибок. Одна техника, которую я использовал, является чем-то вроде этого:

>>> def log_error(func):
...     def _call_func(*args, **argd):
...         try:
...             func(*args, **argd)
...         except:
...             print "error" #substitute your own error handling
...     return _call_func
...
>>> @log_error
... def foo(a):
...     raise AttributeError
...
>>> foo(1)
error

Если Вы будете использовать log_error в качестве декоратора на Вашем представлении, то он автоматически обработает любые ошибки, произошедшие в нем.

Процесс_функция исключения вызвана для некоторых исключений (например: утверждайте (Ложь) в views.py), но процесс_исключение не становится требовавшимся другие ошибки как ImportErrors (например: импортируйте thisclassdoesnotexist в urs.py). Я плохо знаком с Django/Python. Это из-за некоторого различия между ошибками времени выполнения и ошибками времени компиляции?

В Python все ошибки являются ошибками времени выполнения. Причина, почему это вызывает проблемы, состоит в том, потому что эти ошибки происходят сразу, когда модуль импортируется, прежде чем Ваше представление когда-либо называют. Первый метод, который я отправил, зафиксирует ошибки как они для отладки. Вы смогли понимать что-то для производства, но я буду утверждать, что у Вас есть худшие проблемы, если Вы получаете ImportErrors в производственном приложении (и Вы не делаете никакого динамического импорта).

Инструмент как pylint может помочь Вам устранить эти виды проблем все же.

13
ответ дан 1 December 2019 в 03:35
поделиться

Функция process_exception вызвана для некоторых исключений (например: утверждайте (Ложь) в views.py), но process_exception не становится требовавшимся другие ошибки как ImportErrors (например: импортируйте thisclassdoesnotexist в urs.py). Я плохо знаком с Django/Python. Это из-за некоторого различия между ошибками времени выполнения и ошибками времени компиляции?

Нет, это просто, потому что process_exception промежуточное программное обеспечение только называют, если исключение повышено в представлении.

Я думаю, что DEBUG_PROPAGATE_EXCEPTIONS (как упомянуто сначала Jason Baker) - то, в чем Вы нуждаетесь здесь, но я не думаю, что Вы не должны делать ничего дополнительного (т.е. sys.excepthook, и т.д.), если Вы просто хотите traceback, выведенный к консоли.

Если Вы хотите сделать что-либо более сложное с ошибкой (т.е. вывести его в файл или DB), самый простой подход был бы сигналом got_request_exception, который Django посылает за любым связанным с запросом исключением, было ли это повышено в представлении или нет.

get_response и handle_uncaught_exception методы django.core.handlers. BaseHandler поучительны (и резюме) читающий в этой области.

не имея необходимость добавлять любую дополнительную обработку исключений к коду. Я никогда не видел обработку исключений вокруг операторов импорта.

Озирайтесь немного больше, Вы будете видеть сделанный (часто в случаях, где Вы хотите обработать отсутствие зависимости некоторым конкретным способом). Тем не менее это, конечно, было бы довольно ужасно, если бы необходимо было пойти, опрыснув дополнительную попытку - кроме блоков на всем протяжении кода для внесения глобального изменения в то, как обработаны исключения!

6
ответ дан 1 December 2019 в 03:35
поделиться

Если Вы идете *, отклоняют систему, Вы могли

запишите в журнал (например, mylog.txt) в Python затем выполненный "хвост-f mylog.txt" в консоли

это - удобный способ просмотреть, любой отчасти регистрируется в псевдореальное время

-1
ответ дан 1 December 2019 в 03:35
поделиться

Во-первых, существует очень немного ошибок времени компиляции, которые Вы будете видеть через журнал исключения. Если Ваш код Python не имеет допустимого синтаксиса, он умирает задолго до того, как журналы открыты для записи.

В Django runserver режим, положение "печати" пишет в stdout, который Вы видите. Это не хорошее долгосрочное решение, однако, не рассчитывайте на него.

Когда Django работает под Apache, однако, он зависит, на котором плагине Вы используете. mod_python не легок иметь дело с. mod_wsgi может быть принужден в отправку stdout и stderr к файлу журнала.

Ваш лучший выбор, однако, является регистрирующимся модулем. Поместите инициализацию в свой верхний уровень urls.py настраивать вход. (Или, возможно, Ваш settings.py)

Убедитесь, что каждый модуль имеет регистратор в наличии для записи сообщений журнала.

Убедитесь, что каждый вызов веб-сервисов, который Вы выполняете, имеет блок попытки/кроме вокруг этого, и Вы пишете исключения в свой журнал.

2
ответ дан 1 December 2019 в 03:35
поделиться
Другие вопросы по тегам:

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