2017-11-20 14 views
0

이것은 조금 까다 롭지 만 어쨌든 실행 가능해야한다고 생각하지만 도움이 필요합니다. main() 함수 내에서 두 개의 함수를 실행하고 싶습니다. 나는 예외를 두 개에서 따로 잡을 수 있기를 원하지만 두 개를 모두 실행할 수 있고 나머지 하나가 예외를 발생 시키면 적어도 둘 중 하나의 결과를 얻을 수있다.파이썬 - 예외적으로 이동하고 나중에 발생 시키십시오.

의 내가 있다고 가정 해 봅시다 :

def foo(): 
    raise TypeError 

def bar(): 
    return 'bar' 

내가 (here에서 적응) 경우 :

def multiple_exceptions(flist): 
    for f in flist: 
     try: 
      return f() 
     except: 
      continue 

def main(): 
    multiple_exceptions([foo, bar]) 

main() 

main()'bar'을 반환,하지만, 난 여전히 예외를 던질 수 있도록하고 싶습니다 결국 foo()에서 이 방법으로, 나는 여전히 내 기능 중 하나의 결과를 얻었고 오류에 대한 정보는 다른 기능에서 발생했습니다.

+0

main에서 어떻게 호출하고 있습니까? –

+0

답변을 드릴 코드를 편집했습니다. – umbe1987

+0

현재 어떤 결과가 나오고 있습니까? –

답변

0

감사를 사용하여 예외를 저장할 수 있습니다.

def multiple_exceptions(flist): 

    exceptions = [] 

    for f in flist: 
     try: 
      f() 
     except Exception as e: 
      exceptions.append(e.message) 
      continue 

    return exceptions 

def main(): 
    multiple_exceptions([foo, bar]) 

error_messages = main() # list of e.messages occurred (to be raised whenever I want) 

가 그럼 난 예처럼 내 예외를 발생시킬 수 있습니다 나는이 일을 해결 raise Exception(error_messages[0]) (이 경우 첫 번째에만 신경 쓰겠습니다.)

+0

이 질문에 대한 답변이 가장 적절하다고 생각되면; 대답으로 받아 들여라. 솔루션을 작성했기 때문에 질문을 그대로 두지 않아도됩니다. 올바른 경우 자신의 대답을 수락하는 데 아무런 문제가 없습니다. – Bilkokuya

1

당신은 캡처하고 의견, 예컨대 : '같은'

try: 
    raise Exception('I am an error!') 
    print('The poster messed up error-handling code here.') #should not be displayed 
except Exception as Somename: 
    print(Somename.message) 
    # you'll see the error message displayed as a normal print result; 
    # you could do print(stuff, file=sys.stderr) to print it like an error without aborting 

print('Code here still works, the function did not abort despite the error above') 

...or you can do: 
except Exception as Somename: 
    do_stuff() 
    raise Somename 
+1

편집 됨 - 원래의 대답은 오류 메시지를 얻기 위해 print.windows.print를 사용해야한다는 것을 암시하는 것 같습니다. 당신은 또한 당신의 여가 시간에 잡힌 오류를 간단히 재현 할 수 있습니다. – jkm