2016-03-11 3 views
1

В каких контекстах полезно реализовать новые команды, такие как возможный ignored [Excepions], а не определять их как функции?Функции Python vs Реализация команды Cpython


'игнорируется' contextmanager:

import contextlib 

@contextlib.contextmanager 
def ignored(*exceptions): 
    try: 
     yield 
    except exceptions: 
     pass 


Использование:

with ignored(IndexError, KeyError): 
    ## inside code here 


Возможная альтернатива:

ignored IndexError, KeyError: 
    ## inside code here 
+1

Как вы собираетесь реализовать альтернативу? Планируете ли вы обновить парсер python? – tdelaney

+0

@tdelaney Да, я хотел бы узнать ваше мнение о преимуществах и недостатках ... – JumpAlways

+0

Слишком сильная работа с парсером python сложна, а затем вы получаете нестандартный интерпретатор, который, вероятно, будет иметь мало понимания. Помимо игрушечной реализации, которую вы используете на практике, я не вижу никакой пользы от ее выполнения. Если вам нравится вызов, идите на это, но я бы не назвал это полезным для других! – tdelaney

ответ

-1

Это просто делает вещи намного чище.

Checkout эти две реализации

with file("/tmp/foo", "w") as foo: 
    print >> foo, "Hello!" 

Это по существу эквивалентно:

foo = file("/tmp/foo", "w") 
try: 
    print >> foo, "Hello!" 
finally: 
    foo.close() 

Но какой бы вы предпочли использовать!

Отъезд this для дальнейшего ознакомления

+1

Я знаю это, выбор был между этим и обновлением CPython ... – JumpAlways

+0

Ах, хорошо. Тогда я возьму комментарий @tdananey. Это очень хорошо! – quikst3r