2017-05-23 1 views
1

을 잡기 내가 문제가 파이썬 예외 잡으려고 노력이 :NumPy와 모든-앤 슬라이스

File "/usr/lib/python2.7/dist-packages/numpy/lib/nanfunctions.py", line 427, in nanargmax raise ValueError("All-NaN slice encountered") ValueError: All-NaN slice encountered

오류가 슬라이스가 모든-NaN이 포함되어 효과적으로 코드로 나타납니다. 그러나, 나는 그 상황을 파악하고 그것을 처리하고 싶다.

with warnings.catch_warnings(): 
    warnings.filterwarnings('error') 
try: 
    action = np.nanargmax(self.Q[state]) 
except Warning as e: 
    print "error" 
    sys.exit(0) 

오류를 인쇄하려고하지만 try-except 문은 무시됩니다. 도움이 필요하십니까?

+0

왜 'ValueError'에 대한 경고 시스템을 통과하려고합니까? – user2357112

답변

4

except Warning as eexcept ValueError as e으로 변경해야합니다.

ValueError 클래스가 Warning 클래스의 하위 클래스가 아니기 때문입니다. 또는 Exceptionexcept Exception as e으로 잡을 수 있습니다. 모든 예외는 Exception 클래스의 하위 클래스이기 때문에 가능한 한 정확하게 잡는 것이 좋습니다.

+0

정확하게, 최종 작업 코드는 다음과 같습니다. try : action = np.nanargmax (self.Q [state]) ValueError : action = random.randint (0, num_states - 1) – Jonathan