복붙노트

[PYTHON] 파이썬 예외 / 오류 계층 구조 인쇄

PYTHON

파이썬 예외 / 오류 계층 구조 인쇄

예외 / 오류 클래스 계층 구조를 인쇄하려면 파이썬의 모든 명령 행 옵션이 있습니까?

출력은 http://docs.python.org/2/library/exceptions.html#exception-hierarchy와 유사해야합니다.

해결법

  1. ==============================

    1.inspect 모듈이 특히 getclasstree () 함수에 도움이 될 수 있습니다.

    inspect 모듈이 특히 getclasstree () 함수에 도움이 될 수 있습니다.

    inspect.getclasstree(inspect.getmro(Exception))
    

    또는 다음과 같이 상속 트리를 통해 재귀 적으로 __subclasses __ ()를 수행 할 수 있습니다.

    def classtree(cls, indent=0):
        print '.' * indent, cls.__name__
        for subcls in cls.__subclasses__():
            classtree(subcls, indent + 3)
    
    classtree(BaseException)
    

    인쇄물:

     BaseException
    ... Exception
    ...... StandardError
    ......... TypeError
    ......... ImportError
    ............ ZipImportError
    ......... EnvironmentError
    ............ IOError
    ............... ItimerError
    ............ OSError
    ......... EOFError
    ......... RuntimeError
    ............ NotImplementedError
    ......... NameError
    ............ UnboundLocalError
    ......... AttributeError
    ......... SyntaxError
    ............ IndentationError
    ............... TabError
    ......... LookupError
    ............ IndexError
    ............ KeyError
    ............ CodecRegistryError
    ......... ValueError
    ............ UnicodeError
    ............... UnicodeEncodeError
    ............... UnicodeDecodeError
    ............... UnicodeTranslateError
    ......... AssertionError
    ......... ArithmeticError
    ............ FloatingPointError
    ............ OverflowError
    ............ ZeroDivisionError
    ......... SystemError
    ............ CodecRegistryError
    ......... ReferenceError
    ......... MemoryError
    ......... BufferError
    ...... StopIteration
    ...... Warning
    ......... UserWarning
    ......... DeprecationWarning
    ......... PendingDeprecationWarning
    ......... SyntaxWarning
    ......... RuntimeWarning
    ......... FutureWarning
    ......... ImportWarning
    ......... UnicodeWarning
    ......... BytesWarning
    ...... _OptionError
    ... GeneratorExit
    ... SystemExit
    ... KeyboardInterrupt
    
  2. ==============================

    2.표준 라이브러리 대신 코드를 재사용하십시오.

    표준 라이브러리 대신 코드를 재사용하십시오.

    import inspect
    import pydoc
    
    def print_class_hierarchy(classes=()):
        td = pydoc.TextDoc()
        tree_list_of_lists = inspect.getclasstree(classes)
        print(td.formattree(tree_list_of_lists, 'NameSpaceName'))
    

    이것을 사용하려면 우리가 함수를 전달하는 것이 의미있는 클래스의 계층 구조가 목록 형태로 필요합니다. 이 함수를 사용하여 클래스 .__ 하위 클래스 __ () 메소드 결과를 재귀 적으로 검색하여이를 빌드 할 수 있습니다 (여기에서 표준 버전을 유지합니다).

    def get_subclasses(cls):
        """returns all subclasses of argument, cls"""
        if issubclass(cls, type): # not a bound method
            subclasses = cls.__subclasses__(cls)
        else:
            subclasses = cls.__subclasses__()
        for subclass in subclasses:
            subclasses.extend(get_subclasses(subclass))
        return subclasses
    

    함께 넣어 :

    list_of_classes = get_subclasses(int)
    print_class_hierarchy(list_of_classes)
    

    어떤 것을 인쇄합니까 (파이썬 3에서) :

    >>> print_class_hierarchy(classes)
    builtins.int(builtins.object)
        builtins.bool
        enum.IntEnum(builtins.int, enum.Enum)
            inspect._ParameterKind
            signal.Handlers
            signal.Signals
        enum.IntFlag(builtins.int, enum.Flag)
            re.RegexFlag
        sre_constants._NamedIntConstant
        subprocess.Handle
    enum.Enum(builtins.object)
        enum.IntEnum(builtins.int, enum.Enum)
            inspect._ParameterKind
            signal.Handlers
            signal.Signals
    enum.Flag(enum.Enum)
        enum.IntFlag(builtins.int, enum.Flag)
            re.RegexFlag
    

    이것은 우리에게 모든 하위 클래스의 트리와 관련 다중 상속 클래스를 제공하고 그들이 사는 모듈을 알려줍니다.

  3. from https://stackoverflow.com/questions/18296653/print-the-python-exception-error-hierarchy by cc-by-sa and MIT license