Я понимаю, что проглатывать исключения — плохая политика, но я бы предпочел предпочитают, чтобы они были распечатаны и проанализированы позже, чем фактически прекращают выполнение. В моем случае более ценно продолжить выполнение в цикле, чем получить все ключи.
Вот что я сейчас делаю:
Код: Выделить всё
try:
item['a'] = myobject.get('key').METHOD_THAT_DOESNT_EXIST()
except:
item['a'] = ''
try:
item['b'] = OBJECT_THAT_DOESNT_EXIST.get('key2')
except:
item['b'] = ''
try:
item['c'] = func1(ARGUMENT_THAT_DOESNT_EXIST)
except:
item['c'] = ''
...
try:
item['z'] = FUNCTION_THAT_DOESNT_EXIST(myobject.method())
except:
item['z'] = ''
Код: Выделить всё
item['a'] = f(myobject.get('key').get('subkey'))
item['b'] = f(myobject.get('key2'))
item['c'] = f(func1(myobject)
...
Код: Выделить всё
@f
def get_stuff():
item={}
item['a'] = myobject.get('key').get('subkey')
item['b'] = myobject.get('key2')
item['c'] = func1(myobject)
...
return(item)
Насколько я понимаю, это должна исправить какая-то оболочка. Вот что я попробовал с оберткой:
Код: Выделить всё
def f(func):
def silenceit():
try:
func(*args,**kwargs)
except:
print('Error')
return(silenceit)
Код: Выделить всё
>>> f(meow())
Traceback (most recent call last):
File "", line 1, in
NameError: name 'meow' is not defined
Является ли здесь правильным подходом использование функции-обертки?
ОБНОВЛЕНИЕ
Ниже у меня было много действительно полезных и полезных ответов, и спасибо вам за них, но я отредактировал примеры, которые использовал выше, чтобы проиллюстрировать, что я пытаясь уловить больше, чем вложенные ключевые ошибки, я ищу специально функцию, которая оборачивает try-catch for...
- Когда метод не существует.
- Когда объект не существует и для него вызывается метод.
- Когда несуществующий объект вызывается в качестве аргумента функции.
- Любая комбинация любых из этих вещей.
- Бонус, если функция не существует.
Подробнее здесь: https://stackoverflow.com/questions/155 ... -in-python
Мобильная версия