2011-10-31 2 views

답변

8

try 블록에서 bar()을 보자.

try: 
    foo() 
except: 
    pass 
bar() 

, BTW 포괄 except 조항에 조심. 처리하거나 무시할 수있는 예외를 선별 적으로 포착하는 것이 좋습니다.

+2

예외를 제외하고'될 것이다 제외한 베어의 더 나은 형태 :'로이 잡을 수 없습니다 당신이 라인을 많이 실행해야하는 경우,이 예제 같은 것을 시도 KeyboardInterrupt 나 SystemExit 같은 것들. 그래서 이것이 빡빡한 고리에 걸리면^C로 탈출 할 수 있습니다. – PaulMcG

5

bar에 대한 호출이 try- 블록 안에있는 경우 수행 할 수 없습니다. 어느 쪽이든 당신은 블록을 제외하고 시도-의 외부 통화를 보류하거나 사용할 수있는 else : 물론 예외가 발생할 수 있습니다

try: 
    foo() 
except: 
    pass 
else: 
    bar() 

bar 경우 bar에 대해 별도의 try 블록을 사용합니다.

2

try/except 블록을 사용하려는 의도 된 방법이 아닙니다. 당신이 두 기능에서 예외 조항을 제외하고 동일 의해 처리하려면

try: 
    foo() 
except: 
    pass # or whatever 

try: 
    bar() 
except: 
    pass # or whatever 
0

은 다음 내부의 시도를 사용 bar()foo()이 실패하는 경우에도 실행해야하는 경우 블록을 제외하고/자신의 시도에 각각 넣어한다/마지막 블록 :

try: 
    try: 
     foo() 
    finally: 
     bar() 
except Exception: 
    print 'error' 

foo()에 예외가있을 경우는, 제 bar()가 실행되며, 다음 절 제외.

그러나 일반적으로 try 블록 안에 최소 코드를 넣는 것이 좋습니다. 따라서 각 함수에 대한 별도의 예외 처리기가 가장 적합 할 수 있습니다.

0

foo() bar() 함수가 두 개인 경우 다른 해결책을 확인하십시오.

def foo(): 
    raise Exception('foo_message') 
def bar(): 
    print'bar is ok' 
def foobar(): 
    raise Exception('foobar_message') 

functions_to_run = [ 
    foo, 
    bar, 
    foobar, 
] 

for f in functions_to_run: 
    try: 
     f() 
    except Exception as e: 
     print '[Warning] in [{}]: [{}]'.format(f.__name__,e) 

결과 :

[Warning] in [foo]: [foo_message] 
bar is ok 
[Warning] in [foobar]: [foobar_message] 
관련 문제