Có tùy chọn dòng lệnh nào trong python để in phân cấp Cấp ngoại lệ/Lỗi không?In Phân cấp ngoại lệ/lỗi của Python
Sản lượng phải tương tự như http://docs.python.org/2/library/exceptions.html#exception-hierarchy
Có tùy chọn dòng lệnh nào trong python để in phân cấp Cấp ngoại lệ/Lỗi không?In Phân cấp ngoại lệ/lỗi của Python
Sản lượng phải tương tự như http://docs.python.org/2/library/exceptions.html#exception-hierarchy
inspect mô-đun có thể giúp đỡ, đặc biệt getclasstree() chức năng:
Sắp xếp danh sách cho các lớp học vào một hệ thống các danh sách lồng nhau. Trường hợp danh sách lồng nhau xuất hiện, nó chứa các lớp bắt nguồn từ lớp có mục nhập ngay trước danh sách.
inspect.getclasstree(inspect.getmro(Exception))
Hoặc, bạn có một cách đệ quy có thể đi qua __subclasses__()
xuống bởi một cây thừa kế, như thế này:
def classtree(cls, indent=0):
print '.' * indent, cls.__name__
for subcls in cls.__subclasses__():
classtree(subcls, indent + 3)
classtree(BaseException)
in:
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
đang tái sử dụng từ các thư viện chuẩn thay vì lăn của riêng bạn.
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'))
Để sử dụng điều này, chúng tôi cần một phân cấp các lớp, dưới dạng danh sách, có ý nghĩa để chúng tôi chuyển chức năng của mình. Chúng tôi có thể xây dựng này bằng cách đệ quy tìm kiếm một lớp .__subclasses__()
kết quả phương pháp, sử dụng chức năng này (which I'll keep the canonical version of here):
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
Đặt này với nhau:
list_of_classes = get_subclasses(int)
print_class_hierarchy(list_of_classes)
nào in (bằng Python 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
Điều này cung cấp cho chúng ta một cây thuộc tất cả các lớp con, cũng như các lớp thừa kế liên quan nhiều lần - và cho chúng ta biết các mô-đun mà chúng đang sống.