모든 예외 포착 정보
모든 예외를 포착 하는 try
/ except
블록을 어떻게 작성할 수 있습니까?
할 수는 있지만해서는 안됩니다.
try:
do_something()
except:
print "Caught it!"
그러나 이것은 또한 같은 예외를 잡을 것이고 KeyboardInterrupt
일반적으로 그것을 원하지 않습니까? 예외를 즉시 다시 발생시키지 않는 한- 문서에서 다음 예제 를 참조하십시오 .
try:
f = open('myfile.txt')
s = f.readline()
i = int(s.strip())
except IOError as (errno, strerror):
print "I/O error({0}): {1}".format(errno, strerror)
except ValueError:
print "Could not convert data to an integer."
except:
print "Unexpected error:", sys.exc_info()[0]
raise
except:
(다른 사람들이 사용해서는 안된다고 말한) 맨손으로 절을 제외하고, 간단히 잡을 수 있습니다 Exception
:
import traceback
import logging
try:
whatever()
except Exception as e:
logging.error(traceback.format_exc())
# Logs the error appropriately.
예를 들어 종료하기 전에 잡히지 않은 예외를 처리하려는 경우 일반적으로 코드의 가장 바깥 쪽 수준에서이 작업을 수행하는 것을 고려합니다.
except Exception
베어 오버 의 장점은 except
잡히지 않는 몇 가지 예외가 있다는 것입니다. 가장 분명한 것은 다음 KeyboardInterrupt
과 SystemExit
같습니다. 만약 당신이 그것을 잡아서 삼킨다면 누구든지 당신의 스크립트를 빠져 나가는 것을 어렵게 만들 수 있습니다.
일반적인 예외를 처리하기 위해 이렇게 할 수 있습니다.
try:
a = 2/0
except Exception as e:
print e.__doc__
print e.message
여기에있는 것과 유사한 매우 간단한 예 :
http://docs.python.org/tutorial/errors.html#defining-clean-up-actions
모든 예외를 잡으려는 경우 'print "Performing an action that may throw an exception."대신 "try :"문 안에 모든 코드를 넣으십시오.
try:
print "Performing an action which may throw an exception."
except Exception, error:
print "An exception was thrown!"
print str(error)
else:
print "Everything looks great!"
finally:
print "Finally is called directly after executing the try statement whether an exception is thrown or not."
위의 예에서 다음 순서로 출력이 표시됩니다.
1) 예외를 던질 수있는 작업 수행.
2) 마지막으로 예외 발생 여부에 관계없이 try 문을 실행 한 후 직접 호출됩니다.
3) "An exception was thrown!" or "Everything looks great!" depending on whether an exception was thrown.
Hope this helps!
To catch all possible exceptions, catch BaseException
. It's on top of the Exception hierarchy:
Python 3: https://docs.python.org/3.5/library/exceptions.html#exception-hierarchy
Python 2.7: https://docs.python.org/2.7/library/exceptions.html#exception-hierarchy
try:
something()
except BaseException as error:
print('An exception occurred: {}'.format(error))
But as other people mentioned, you should usually not do this, unless you have a very good reason.
I've just found out this little trick for testing if exception names in Python 2.7 . Sometimes i have handled specific exceptions in the code, so i needed a test to see if that name is within a list of handled exceptions.
try:
raise IndexError #as test error
except Exception as e:
excepName = type(e).__name__ # returns the name of the exception
There are multiple ways to do this in particular with Python 3.0 and above
Approach 1
This is simple approach but not recommended because you would not know exactly which line of code is actually throwing the exception:
def bad_method():
try:
sqrt = 0**-1
except Exception as e:
print(e)
bad_method()
Approach 2
This approach is recommended because it provides more detail about each exception. It includes:
- Line number for your code
- File name
- The actual error in more verbose way
The only drawback is tracback needs to be imported.
import traceback
def bad_method():
try:
sqrt = 0**-1
except Exception:
print(traceback.print_exc())
bad_method()
try:
whatever()
except:
# this will catch any exception or error
It is worth mentioning this is not proper Python coding. This will catch also many errors you might not want to catch.
참고URL : https://stackoverflow.com/questions/4990718/about-catching-any-exception
'Program Tip' 카테고리의 다른 글
마스터에서 Git 브랜치 업데이트 (0) | 2020.10.02 |
---|---|
문자열 목록에서 빈 문자열 제거 (0) | 2020.10.02 |
Python에서 테스트 없음 (0) | 2020.10.02 |
Rails 4에서 관심사를 사용하는 방법 (0) | 2020.10.02 |
jQuery : 선택한 요소 태그 이름 가져 오기 (0) | 2020.10.02 |