2017-12-18 1 views
0

를 실행한다면, 시도 및 확인/제외하고는, 그 확인해야합니다. 이 기능은 약간 이상하게 작동합니다. 여기에 도움을 주시면 감사하겠습니다.파이썬/win32com/응용 프로그램이 내가 조금 기능이</p> <p>윈도우 7에 파이썬 3.6.2를 사용하고

Excel이 실행 중인지 확인해야합니다. 그렇다면 텍스트를 인쇄하고 응용 프로그램을 종료하십시오. 없으면 모든 것이 정상입니다. 계속하십시오. 엑셀 가 시도 블록은 및 제외 블록이뿐만 아니라 실행되는 인쇄 아니라 sys.exit()를 포함하여 실행 실행

내 문제는 지금이다!? Excel이 이 아니고이 실행 중이면 모든 것이 정상이며 try 블록이 중단되고 except 블록 만 실행됩니다.

Excel이 실행 중일 때 둘 다 인쇄 명령문을 실행하는 이유는 무엇입니까?

도와주세요!

def check_if_Excel_runs(): 
    import win32com.client 
    import sys 
    try: 
     win32com.client.GetActiveObject("Excel.Application") 
     # If there is NO error at this stage, Excel is already running 
     print('Excel is running, please close first') 
     sys.exit() 
    except: 
     print('Excel is NOT running, this is good!') 
    return 

check_if_Excel_runs() 

내 출력 (Excel이 실행) : 사전에

Excel is running, please close first 
Excel is NOT running, this is good! 

감사

여기 내 코드입니다!

UPDATE :

확인, 나는 일반적으로 내가 처리 할 예외를 specifiying없이 "제외"하지 말아야 할 것을 이해했다. 그러나 예외를 결정하는 방법을 결정하려면 어떻게해야할까요? 오류 메시지를 보면 나에게 명확하지 않습니다.

com_error         Traceback (most recent call last) 
<ipython-input-39-70980aa1c5df> in <module>() 
    11  return 
    12 
---> 13 check_if_Excel_runs() 

<ipython-input-39-70980aa1c5df> in check_if_Excel_runs() 
     3  import sys 
     4  try: 
----> 5   win32com.client.GetActiveObject("Excel.Application") 
     6   # If there is NO error at this stage, Excel is already running 
     7   print('Excel is running, please close first') 

c:\users\chnn\appdata\local\programs\python\python36-32\lib\site-packages\win32com\client\__init__.py in GetActiveObject(Class, clsctx) 
    77 """ 
    78 resultCLSID = pywintypes.IID(Class) 
---> 79 dispatch = pythoncom.GetActiveObject(resultCLSID) 
    80 dispatch = dispatch.QueryInterface(pythoncom.IID_IDispatch) 
    81 return __WrapDispatch(dispatch, Class, resultCLSID = resultCLSID, clsctx = clsctx) 

com_error: (-2147221021, 'Operation unavailable', None, None) 

여러분의 도움에 다시 한번 감사드립니다.

+0

마지막 줄에는'com_error : ...'가 표시되므로 예외는'com_error'입니다. 여전히 패키지 이름이 필요합니다. 'python com_error'를 google에 입력하면'pythoncom.com_error'라는 결과를 얻게됩니다. – pschill

답변

0

sys.exit()도 예외를 throw하기 때문에 이런 현상이 발생합니다.

0

귀하의 문제는 sys.exit()가 예외를 throw하고 있다고 생각됩니다.

Sys.exit()은 시스템 종료 예외를 throw하여 종료됩니다. 당신은 거기에 넣을 수 없으며 그냥 일반적인 catch all 문을 사용하십시오.

희망이 도움이됩니다. sys.exit에 파이썬 문서에서

0

() 당신은 문제가 여기에 무엇을 볼 수 있습니다

This is implemented by raising the SystemExit exception, so cleanup actions specified by finally clauses of try statements are honored, and it is possible to intercept the exit attempt at an outer level.

을 그래서 어떻게하면 sys.exit()가 실행되고 있음을하며 SystemExit없이 던지는하여 프로그램을 종료하려고 예외. 그러나 예외를 잡은 다음 메시지를 인쇄하는 것을 제외하고는 일반을 작성 했으므로

여기에서는 일반적인 예외를 작성하는 것이 왜 나쁜지에 대한 훌륭한 예를 제공합니다. 사용자가 잡으려고하지 않는 예외를 잡을 수 있기 때문입니다.

win32com.client.GetActiveObject("Excel.Application") 

예외 유형을 찾아보고 여기에있는 예외 만 찾아야합니다.

관련 문제