2017-02-16 2 views
1

Я новичок в Python и все еще изучаю трюки.Один вкладыш для обработки словаря KeyError

Как преобразовать следующий код в один лайнер, возможно ли это в Python? Должен быть аккуратный способ сделать это.

try: 
    image_file = self.request.files['image_path'] 
except: 
    image_file = None 
+0

В Python нет такой вещи, как однострочная попытка. Если исключение, которое вы защищаете, является «KeyError» из 'dict', вы можете использовать [' get'] (https://docs.python.org/2/library/stdtypes.html#dict.get) – khelwood

+1

Что такое self.request.files - это словарь? – Tarptaeya

+1

BTW, используя голый 'except', как правило, не является хорошей идеей (если только в конце цепочки названных исключений не существует, и даже тогда вы, вероятно, захотите повторно создать исключение после печати предупреждения или выполнения какой-либо другой обработки). Всегда указывайте исключение (исключения), которое вы хотите поймать. –

ответ

4

У вас есть словарь, используйте dict.get() method вернуть значение по умолчанию для отсутствующих ключей:

image_file = self.request.files.get('image_path') 

Кроме того, не не обработки исключений использования покемона. Вам действительно не нужно ловить их всех здесь; если отсутствует ключ, KeyError поднят, если вы должны использовать try..except, следует поймать только, что одно исключение из except KeyError:.

+0

, можете ли вы, пожалуйста, продумать, все еще в фазе попытки обернуть голову вокруг питона – Baig

+3

Мне очень нравится фраза «обработка ошибок покемона». :) –

+0

@Baig: Я связался с соответствующей документацией для словарей. Вы не сказали нам больше о том, откуда приходит «self.request», может быть, этот код из обработчика запросов Tornado? –

Смежные вопросы