2016-08-22 4 views
0

4 가지 기능이 있습니다. 내 코드가 첫 번째 코드와 두 번째, 세 번째 또는 네 번째 코드를 수행하기를 원합니다. 또한 모두 실패하지 않는 한 무엇보다도 적어도 하나 (그 중 하나)를 원합니다. 내 초기 구현했다 :함수 또는 함수 호출 (파이썬)

기능 2 작동하지 않는 경우
try: 
    function1(var) 
except: 
    pass 
try: 
    function2(var) or function3(var) or function4(var) 
except: 
    pass 

,이 기능 3로 이동하지 않고, 어떻게 그 설명하기 위해 코딩 할 수 있는가?

답변

2

함수의 성공 여부가 결정되면 예외가 발생하는지 여부에 관계없이 성공한 함수가 반환 될 때까지 함수 목록을 호출하려고하는 도우미 메서드를 작성할 수 있습니다.

#!/usr/bin/env python 
# coding: utf-8 

import sys 

def callany(*funs): 
    """ 
    Returns the return value of the first successfully called function 
    otherwise raises an error. 
    """ 
    for fun in funs: 
     try: 
      return fun() 
     except Exception as err: 
      print('call to %s failed' % (fun.__name__), file=sys.stderr) 
    raise RuntimeError('none of the functions could be called') 

if __name__ == '__main__': 
    def a(): raise NotImplementedError('a') 
    def b(): raise NotImplementedError('b') 
    # def c(): raise NotImplementedError('c') 
    c = lambda: "OK" 

    x = callany(a, b, c) 
    print(x) 
    # call to a failed 
    # call to b failed 
    # OK 

위의 장난감 구현은 함수 인수에 대한 지원을 추가하여 향상시킬 수 있습니다.

의 Runnable 조각 : https://glot.io/snippets/ehqk3alcfv

함수는 부울 값을 반환하여 성공을 표시하는 경우, 당신은 그냥 평범한 부울 식으로 사용할 수 있습니다.