program story

Python에서 except :와 예외 e :를 제외하는 것의 차이점

inputbox 2020. 8. 4. 07:21
반응형

Python에서 except :와 예외 e :를 제외하는 것의 차이점


다음 코드 스 니펫은 모두 동일한 작업을 수행합니다. 그들은 모든 예외를 포착하고 except:블록 에서 코드를 실행합니다.

스 니펫 1-

try:
    #some code that may throw an exception
except:
    #exception handling code

스 니펫 2-

try:
    #some code that may throw an exception
except Exception as e:
    #exception handling code

두 구성의 차이점은 무엇입니까?


두 번째로 예외 객체의 속성에 액세스 할 수 있습니다.

>>> def catch():
...     try:
...         asd()
...     except Exception as e:
...         print e.message, e.args
... 
>>> catch()
global name 'asd' is not defined ("global name 'asd' is not defined",)

하지만 잡을 수없는 BaseException또는 시스템 종료 예외 SystemExit, KeyboardInterruptGeneratorExit:

>>> def catch():
...     try:
...         raise BaseException()
...     except Exception as e:
...         print e.message, e.args
... 
>>> catch()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 3, in catch
BaseException

다음을 제외한 맨손 :

>>> def catch():
...     try:
...         raise BaseException()
...     except:
...         pass
... 
>>> catch()
>>> 

자세한 내용은 문서 내장 예외 섹션과 자습서 오류 및 예외 섹션을 참조하십시오.


except:

모든 예외를 수용 하는 반면

except Exception as e:

단지 당신이하고 있다는 예외 허용 을 의미 캐치에 있습니다.

Here's an example of one that you're not meant to catch:

>>> try:
...     input()
... except:
...     pass
... 
>>> try:
...     input()
... except Exception as e:
...     pass
... 
Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
KeyboardInterrupt

The first one silenced the KeyboardInterrupt!

Here's a quick list:

issubclass(BaseException, BaseException)
#>>> True
issubclass(BaseException, Exception)
#>>> False


issubclass(KeyboardInterrupt, BaseException)
#>>> True
issubclass(KeyboardInterrupt, Exception)
#>>> False


issubclass(SystemExit, BaseException)
#>>> True
issubclass(SystemExit, Exception)
#>>> False

If you want to catch any of those, it's best to do

except BaseException:

to point out that you know what you're doing.


All exceptions stem from BaseException, and those you're meant to catch day-to-day (those that'll be thrown for the programmer) inherit too from Exception.


There are differences with some exceptions, e.g. KeyboardInterrupt.

Reading PEP8:

A bare except: clause will catch SystemExit and KeyboardInterrupt exceptions, making it harder to interrupt a program with Control-C, and can disguise other problems. If you want to catch all exceptions that signal program errors, use except Exception: (bare except is equivalent to except BaseException:).


Using the second form gives you a variable (named based upon the as clause, in your example e) in the except block scope with the exception object bound to it so you can use the infomration in the exception (type, message, stack trace, etc) to handle the exception in a more specially tailored manor.

참고URL : https://stackoverflow.com/questions/18982610/difference-between-except-and-except-exception-as-e-in-python

반응형