INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'blog.apps.BlogConfig',
]
try / except
:try / except
с конкретными ошибками - это позволит обрабатывать те ошибки, которые реально могут произойти. К примеру, Вы в ответе можете получить поле foo
или не получить - почти наверняка данный код стоит обработать на KeyError
.try / except
без перечисления ошибок (пустой блок) стоит писать только тогда, когда Вы реально знаете зачем он. К примеру, Вы не знаете, какие ошибки могут произойти в коде, т.к. его много или он плохо написан или плохо спроектирован, но при этом, хотелось бы чтобы код не падал и работал дальше - да, тогда его стоит использовать. Но при таком случае, обязательно сделайте хороший логгинг или еррор репортинг админу внутри блока except
.LOGGING = {
"version": 1,
"disable_existing_loggers": False,
"formatters": {
"rotate": {"format": "%(levelname)s %(asctime)s %(pathname)s %(lineno)d %(message)s"}
},
"handlers": {
"file_rotate": {
"level": "DEBUG",
"class": "logging.handlers.TimedRotatingFileHandler",
"formatter": "rotate",
"filename": "/var/log/my_logger.log",
"when": "midnight",
}
},
"loggers": {
"my_logger": {
"level": "DEBUG",
"handlers": ["file_rotate"]
}
},
}
import logging
my_logger = logging.getLogger("my_logger")
my_logger.debug('debug message')
my_logger.info('info message')
my_logger.error('error message')
my_logger.critical('critical message')
for a in range(10):
for b in range(20):
for c in range(30):
for d in range(40):
if d == 1:
if c == 1:
if b == 1:
if a == 1:
print('nested code')
for a in range(10):
print('flat code')