Pytorch 如何使用torch.utils.tensorboard';s SummaryWriter添加带有字典输出的图?

Pytorch 如何使用torch.utils.tensorboard';s SummaryWriter添加带有字典输出的图?,pytorch,tensorboard,graph-visualization,Pytorch,Tensorboard,Graph Visualization,我有一个PyTorch模型,它继承自nn.Module,有一个forward方法,它返回一个包含多个张量(存储为值)的字典。当我尝试使用torch.utils.TensorBoard的SummaryWriter.add_graph()方法将此模型记录到TensorBoard时,我收到以下错误: RuntimeError(“跟踪器无法推断 当模型的forward()方法返回字典时,如何使用add\u graph() 编辑1:完成堆栈跟踪,直至出现错误: WARNING:root:This caff

我有一个PyTorch模型,它继承自
nn.Module
,有一个
forward
方法,它返回一个包含多个张量(存储为值)的字典。当我尝试使用
torch.utils.TensorBoard
SummaryWriter.add_graph()
方法将此模型记录到TensorBoard时,我收到以下错误:

RuntimeError(“跟踪器无法推断

当模型的
forward()
方法返回字典时,如何使用
add\u graph()

编辑1:完成堆栈跟踪,直至出现错误:

WARNING:root:This caffe2 python run does not have GPU support. Will run in CPU only mode.
Only tensors or tuples of tensors can be output from traced functions (getOutput at /pytorch/torch/csrc/jit/tracer.cpp:208)
frame #0: c10::Error::Error(c10::SourceLocation, std::string const&) + 0x33 (0x7fc661bd4273 in /usr/local/lib/python3.6/dist-packages/torch/lib/libc10.so)
frame #1: torch::jit::tracer::TracingState::getOutput(c10::IValue const&) + 0x3e8 (0x7fc664cf77b8 in /usr/local/lib/python3.6/dist-packages/torch/lib/libtorch.so)
frame #2: torch::jit::tracer::exit(std::vector<c10::IValue, std::allocator<c10::IValue> > const&) + 0x3c (0x7fc664cf7aec in /usr/local/lib/python3.6/dist-packages/torch/lib/libtorch.so)
frame #3: <unknown function> + 0x47b0f2 (0x7fc66e4820f2 in /usr/local/lib/python3.6/dist-packages/torch/lib/libtorch_python.so)
frame #4: <unknown function> + 0x48f061 (0x7fc66e496061 in /usr/local/lib/python3.6/dist-packages/torch/lib/libtorch_python.so)
frame #5: <unknown function> + 0x19da64 (0x7fc66e1a4a64 in /usr/local/lib/python3.6/dist-packages/torch/lib/libtorch_python.so)
frame #6: _PyCFunction_FastCallDict + 0x35c (0x5674fc in /usr/bin/python3.6)
frame #7: /usr/bin/python3.6() [0x50abb3]
frame #8: _PyEval_EvalFrameDefault + 0x449 (0x50c5b9 in /usr/bin/python3.6)
frame #9: <unknown function> + 0x18d10 (0x7fc6965ded10 in /home/rylan/.PyCharmCE2019.3/system/cythonExtensions/_pydevd_frame_eval_ext/pydevd_frame_evaluator.cpython-36m-x86_64-linux-gnu.so)
frame #10: /usr/bin/python3.6() [0x508245]
frame #11: /usr/bin/python3.6() [0x50a080]
frame #12: /usr/bin/python3.6() [0x50aa7d]
frame #13: _PyEval_EvalFrameDefault + 0x449 (0x50c5b9 in /usr/bin/python3.6)
frame #14: <unknown function> + 0x18d10 (0x7fc6965ded10 in /home/rylan/.PyCharmCE2019.3/system/cythonExtensions/_pydevd_frame_eval_ext/pydevd_frame_evaluator.cpython-36m-x86_64-linux-gnu.so)
frame #15: /usr/bin/python3.6() [0x508245]
frame #16: /usr/bin/python3.6() [0x50a080]
frame #17: /usr/bin/python3.6() [0x50aa7d]
frame #18: _PyEval_EvalFrameDefault + 0x449 (0x50c5b9 in /usr/bin/python3.6)
frame #19: <unknown function> + 0x18d10 (0x7fc6965ded10 in /home/rylan/.PyCharmCE2019.3/system/cythonExtensions/_pydevd_frame_eval_ext/pydevd_frame_evaluator.cpython-36m-x86_64-linux-gnu.so)
frame #20: /usr/bin/python3.6() [0x508245]
frame #21: /usr/bin/python3.6() [0x50a080]
frame #22: /usr/bin/python3.6() [0x50aa7d]
frame #23: _PyEval_EvalFrameDefault + 0x449 (0x50c5b9 in /usr/bin/python3.6)
frame #24: <unknown function> + 0x18d10 (0x7fc6965ded10 in /home/rylan/.PyCharmCE2019.3/system/cythonExtensions/_pydevd_frame_eval_ext/pydevd_frame_evaluator.cpython-36m-x86_64-linux-gnu.so)
frame #25: /usr/bin/python3.6() [0x508245]
frame #26: /usr/bin/python3.6() [0x50a080]
frame #27: /usr/bin/python3.6() [0x50aa7d]
frame #28: _PyEval_EvalFrameDefault + 0x1220 (0x50d390 in /usr/bin/python3.6)
frame #29: <unknown function> + 0x18d10 (0x7fc6965ded10 in /home/rylan/.PyCharmCE2019.3/system/cythonExtensions/_pydevd_frame_eval_ext/pydevd_frame_evaluator.cpython-36m-x86_64-linux-gnu.so)
frame #30: /usr/bin/python3.6() [0x508245]
frame #31: _PyFunction_FastCallDict + 0x2e2 (0x509642 in /usr/bin/python3.6)
frame #32: /usr/bin/python3.6() [0x595311]
frame #33: /usr/bin/python3.6() [0x54a6ff]
frame #34: /usr/bin/python3.6() [0x551b81]
frame #35: _PyObject_FastCallKeywords + 0x19c (0x5aa6ec in /usr/bin/python3.6)
frame #36: /usr/bin/python3.6() [0x50abb3]
frame #37: _PyEval_EvalFrameDefault + 0x1220 (0x50d390 in /usr/bin/python3.6)
frame #38: <unknown function> + 0x18d10 (0x7fc6965ded10 in /home/rylan/.PyCharmCE2019.3/system/cythonExtensions/_pydevd_frame_eval_ext/pydevd_frame_evaluator.cpython-36m-x86_64-linux-gnu.so)
frame #39: /usr/bin/python3.6() [0x509d48]
frame #40: /usr/bin/python3.6() [0x50aa7d]
frame #41: _PyEval_EvalFrameDefault + 0x449 (0x50c5b9 in /usr/bin/python3.6)
frame #42: <unknown function> + 0x18d10 (0x7fc6965ded10 in /home/rylan/.PyCharmCE2019.3/system/cythonExtensions/_pydevd_frame_eval_ext/pydevd_frame_evaluator.cpython-36m-x86_64-linux-gnu.so)
frame #43: /usr/bin/python3.6() [0x508245]
frame #44: /usr/bin/python3.6() [0x516915]
frame #45: /usr/bin/python3.6() [0x50a8af]
frame #46: _PyEval_EvalFrameDefault + 0x449 (0x50c5b9 in /usr/bin/python3.6)
frame #47: <unknown function> + 0x18d10 (0x7fc6965ded10 in /home/rylan/.PyCharmCE2019.3/system/cythonExtensions/_pydevd_frame_eval_ext/pydevd_frame_evaluator.cpython-36m-x86_64-linux-gnu.so)
frame #48: /usr/bin/python3.6() [0x508245]
frame #49: /usr/bin/python3.6() [0x50a080]
frame #50: /usr/bin/python3.6() [0x50aa7d]
frame #51: _PyEval_EvalFrameDefault + 0x449 (0x50c5b9 in /usr/bin/python3.6)
frame #52: <unknown function> + 0x18d10 (0x7fc6965ded10 in /home/rylan/.PyCharmCE2019.3/system/cythonExtensions/_pydevd_frame_eval_ext/pydevd_frame_evaluator.cpython-36m-x86_64-linux-gnu.so)
frame #53: /usr/bin/python3.6() [0x509d48]
frame #54: /usr/bin/python3.6() [0x50aa7d]
frame #55: _PyEval_EvalFrameDefault + 0x449 (0x50c5b9 in /usr/bin/python3.6)
frame #56: /usr/bin/python3.6() [0x508245]
frame #57: /usr/bin/python3.6() [0x50a080]
frame #58: /usr/bin/python3.6() [0x50aa7d]
frame #59: _PyEval_EvalFrameDefault + 0x449 (0x50c5b9 in /usr/bin/python3.6)
frame #60: /usr/bin/python3.6() [0x509d48]
frame #61: /usr/bin/python3.6() [0x50aa7d]
frame #62: _PyEval_EvalFrameDefault + 0x449 (0x50c5b9 in /usr/bin/python3.6)
frame #63: /usr/bin/python3.6() [0x508245]

Error occurs, No graph saved
Traceback (most recent call last):
  File "/usr/lib/python3.6/contextlib.py", line 99, in __exit__
    self.gen.throw(type, value, traceback)
  File "/usr/local/lib/python3.6/dist-packages/torch/onnx/utils.py", line 42, in set_training
    yield
  File "/usr/local/lib/python3.6/dist-packages/torch/utils/tensorboard/_pytorch_graph.py", line 234, in graph
    raise e
  File "/usr/local/lib/python3.6/dist-packages/torch/utils/tensorboard/_pytorch_graph.py", line 229, in graph
    trace = torch.jit.trace(model, args)
  File "/usr/local/lib/python3.6/dist-packages/torch/jit/__init__.py", line 772, in trace
    check_tolerance, _force_outplace, _module_class)
  File "/usr/local/lib/python3.6/dist-packages/torch/jit/__init__.py", line 904, in trace_module
    module._c._create_method_from_trace(method_name, func, example_inputs, var_lookup_fn, _force_outplace)
RuntimeError: Only tensors or tuples of tensors can be output from traced functions (getOutput at /pytorch/torch/csrc/jit/tracer.cpp:208)
frame #0: c10::Error::Error(c10::SourceLocation, std::string const&) + 0x33 (0x7fc661bd4273 in /usr/local/lib/python3.6/dist-packages/torch/lib/libc10.so)
frame #1: torch::jit::tracer::TracingState::getOutput(c10::IValue const&) + 0x3e8 (0x7fc664cf77b8 in /usr/local/lib/python3.6/dist-packages/torch/lib/libtorch.so)
frame #2: torch::jit::tracer::exit(std::vector<c10::IValue, std::allocator<c10::IValue> > const&) + 0x3c (0x7fc664cf7aec in /usr/local/lib/python3.6/dist-packages/torch/lib/libtorch.so)
frame #3: <unknown function> + 0x47b0f2 (0x7fc66e4820f2 in /usr/local/lib/python3.6/dist-packages/torch/lib/libtorch_python.so)
frame #4: <unknown function> + 0x48f061 (0x7fc66e496061 in /usr/local/lib/python3.6/dist-packages/torch/lib/libtorch_python.so)
frame #5: <unknown function> + 0x19da64 (0x7fc66e1a4a64 in /usr/local/lib/python3.6/dist-packages/torch/lib/libtorch_python.so)
frame #6: _PyCFunction_FastCallDict + 0x35c (0x5674fc in /usr/bin/python3.6)
frame #7: /usr/bin/python3.6() [0x50abb3]
frame #8: _PyEval_EvalFrameDefault + 0x449 (0x50c5b9 in /usr/bin/python3.6)
frame #9: <unknown function> + 0x18d10 (0x7fc6965ded10 in /home/rylan/.PyCharmCE2019.3/system/cythonExtensions/_pydevd_frame_eval_ext/pydevd_frame_evaluator.cpython-36m-x86_64-linux-gnu.so)
frame #10: /usr/bin/python3.6() [0x508245]
frame #11: /usr/bin/python3.6() [0x50a080]
frame #12: /usr/bin/python3.6() [0x50aa7d]
frame #13: _PyEval_EvalFrameDefault + 0x449 (0x50c5b9 in /usr/bin/python3.6)
frame #14: <unknown function> + 0x18d10 (0x7fc6965ded10 in /home/rylan/.PyCharmCE2019.3/system/cythonExtensions/_pydevd_frame_eval_ext/pydevd_frame_evaluator.cpython-36m-x86_64-linux-gnu.so)
frame #15: /usr/bin/python3.6() [0x508245]
frame #16: /usr/bin/python3.6() [0x50a080]
frame #17: /usr/bin/python3.6() [0x50aa7d]
frame #18: _PyEval_EvalFrameDefault + 0x449 (0x50c5b9 in /usr/bin/python3.6)
frame #19: <unknown function> + 0x18d10 (0x7fc6965ded10 in /home/rylan/.PyCharmCE2019.3/system/cythonExtensions/_pydevd_frame_eval_ext/pydevd_frame_evaluator.cpython-36m-x86_64-linux-gnu.so)
frame #20: /usr/bin/python3.6() [0x508245]
frame #21: /usr/bin/python3.6() [0x50a080]
frame #22: /usr/bin/python3.6() [0x50aa7d]
frame #23: _PyEval_EvalFrameDefault + 0x449 (0x50c5b9 in /usr/bin/python3.6)
frame #24: <unknown function> + 0x18d10 (0x7fc6965ded10 in /home/rylan/.PyCharmCE2019.3/system/cythonExtensions/_pydevd_frame_eval_ext/pydevd_frame_evaluator.cpython-36m-x86_64-linux-gnu.so)
frame #25: /usr/bin/python3.6() [0x508245]
frame #26: /usr/bin/python3.6() [0x50a080]
frame #27: /usr/bin/python3.6() [0x50aa7d]
frame #28: _PyEval_EvalFrameDefault + 0x1220 (0x50d390 in /usr/bin/python3.6)
frame #29: <unknown function> + 0x18d10 (0x7fc6965ded10 in /home/rylan/.PyCharmCE2019.3/system/cythonExtensions/_pydevd_frame_eval_ext/pydevd_frame_evaluator.cpython-36m-x86_64-linux-gnu.so)
frame #30: /usr/bin/python3.6() [0x508245]
frame #31: _PyFunction_FastCallDict + 0x2e2 (0x509642 in /usr/bin/python3.6)
frame #32: /usr/bin/python3.6() [0x595311]
frame #33: /usr/bin/python3.6() [0x54a6ff]
frame #34: /usr/bin/python3.6() [0x551b81]
frame #35: _PyObject_FastCallKeywords + 0x19c (0x5aa6ec in /usr/bin/python3.6)
frame #36: /usr/bin/python3.6() [0x50abb3]
frame #37: _PyEval_EvalFrameDefault + 0x1220 (0x50d390 in /usr/bin/python3.6)
frame #38: <unknown function> + 0x18d10 (0x7fc6965ded10 in /home/rylan/.PyCharmCE2019.3/system/cythonExtensions/_pydevd_frame_eval_ext/pydevd_frame_evaluator.cpython-36m-x86_64-linux-gnu.so)
frame #39: /usr/bin/python3.6() [0x509d48]
frame #40: /usr/bin/python3.6() [0x50aa7d]
frame #41: _PyEval_EvalFrameDefault + 0x449 (0x50c5b9 in /usr/bin/python3.6)
frame #42: <unknown function> + 0x18d10 (0x7fc6965ded10 in /home/rylan/.PyCharmCE2019.3/system/cythonExtensions/_pydevd_frame_eval_ext/pydevd_frame_evaluator.cpython-36m-x86_64-linux-gnu.so)
frame #43: /usr/bin/python3.6() [0x508245]
frame #44: /usr/bin/python3.6() [0x516915]
frame #45: /usr/bin/python3.6() [0x50a8af]
frame #46: _PyEval_EvalFrameDefault + 0x449 (0x50c5b9 in /usr/bin/python3.6)
frame #47: <unknown function> + 0x18d10 (0x7fc6965ded10 in /home/rylan/.PyCharmCE2019.3/system/cythonExtensions/_pydevd_frame_eval_ext/pydevd_frame_evaluator.cpython-36m-x86_64-linux-gnu.so)
frame #48: /usr/bin/python3.6() [0x508245]
frame #49: /usr/bin/python3.6() [0x50a080]
frame #50: /usr/bin/python3.6() [0x50aa7d]
frame #51: _PyEval_EvalFrameDefault + 0x449 (0x50c5b9 in /usr/bin/python3.6)
frame #52: <unknown function> + 0x18d10 (0x7fc6965ded10 in /home/rylan/.PyCharmCE2019.3/system/cythonExtensions/_pydevd_frame_eval_ext/pydevd_frame_evaluator.cpython-36m-x86_64-linux-gnu.so)
frame #53: /usr/bin/python3.6() [0x509d48]
frame #54: /usr/bin/python3.6() [0x50aa7d]
frame #55: _PyEval_EvalFrameDefault + 0x449 (0x50c5b9 in /usr/bin/python3.6)
frame #56: /usr/bin/python3.6() [0x508245]
frame #57: /usr/bin/python3.6() [0x50a080]
frame #58: /usr/bin/python3.6() [0x50aa7d]
frame #59: _PyEval_EvalFrameDefault + 0x449 (0x50c5b9 in /usr/bin/python3.6)
frame #60: /usr/bin/python3.6() [0x509d48]
frame #61: /usr/bin/python3.6() [0x50aa7d]
frame #62: _PyEval_EvalFrameDefault + 0x449 (0x50c5b9 in /usr/bin/python3.6)
frame #63: /usr/bin/python3.6() [0x508245]
警告:root:此caffe2 python运行不支持GPU。将在仅CPU模式下运行。
跟踪函数只能输出张量或张量元组(getOutput at/pytorch/torch/csc/jit/tracer.cpp:208)
帧#0:c10::Error::Error(c10::SourceLocation,std::string const&)+0x33(0x7fc661bd4273 in/usr/local/lib/python3.6/dist packages/torch/lib/libc10.so)
帧#1:torch::jit::tracer::TracingState::getOutput(c10::IValue const&)+0x3e8(0x7fc664cf77b8 in/usr/local/lib/python3.6/dist packages/torch/lib/libtorch.so)
帧2:torch::jit::tracer::exit(std::vector const&)+0x3c(0x7fc664cf7aec in/usr/local/lib/python3.6/dist packages/torch/lib/libtorch.so)
帧#3:+0x47b0f2(在/usr/local/lib/python3.6/dist-packages/torch/lib/libtorch_-python.so中为0x7fc66e4820f2)
帧4:+0x48f061(0x7FC66E49061 in/usr/local/lib/python3.6/dist-packages/torch/lib/libtorch_-python.so)
帧#5:+0x19da64(0x7fc66e1a4a64 in/usr/local/lib/python3.6/dist-packages/torch/lib/libtorch_python.so)
帧#6:_PyCFunction_FastCallDict+0x35c(0x5674fc in/usr/bin/python3.6)
帧#7:/usr/bin/python3.6()[0x50abb3]
第8帧:_PyEval_EvalFrameDefault+0x449(在/usr/bin/python3.6中为0x50c5b9)
frame#9:+0x18d10(0x7fc6965ded10 in/home/rylan/.PyCharmCE2019.3/system/cythonExtensions/_pydevd_frame_eval_ext/pydevd_frame_evaluator.cpython-36m-x86_64-linux-gnu.so)
帧#10:/usr/bin/python3.6()[0x508245]
帧#11:/usr/bin/python3.6()[0x50a080]
帧#12:/usr/bin/python3.6()[0x50aa7d]
第13帧:_PyEval_EvalFrameDefault+0x449(在/usr/bin/python3.6中为0x50c5b9)
frame#14:+0x18d10(0x7fc6965ded10 in/home/rylan/.PyCharmCE2019.3/system/cythonExtensions/_-pydevd_frame#eval_ext/pydevd_frame_evaluator.cpython-36m-x86_64-linux-gnu.so)
帧#15:/usr/bin/python3.6()[0x508245]
帧#16:/usr/bin/python3.6()[0x50a080]
帧#17:/usr/bin/python3.6()[0x50aa7d]
第18帧:_PyEval_EvalFrameDefault+0x449(在/usr/bin/python3.6中为0x50c5b9)
帧19:+0x18d10(0x7fc6965ded10 in/home/rylan/.PyCharmCE2019.3/system/cythonExtensions/_-pydevd_-frame_-eval_-ext/pydevd_-frame_-evaluator.cpython-36m-x86_64-linux-gnu.so)
帧20:/usr/bin/python3.6()[0x508245]
帧21:/usr/bin/python3.6()[0x50a080]
帧#22:/usr/bin/python3.6()[0x50aa7d]
第23帧:_PyEval_EvalFrameDefault+0x449(在/usr/bin/python3.6中为0x50c5b9)
帧24:+0x18d10(0x7fc6965ded10 in/home/rylan/.PyCharmCE2019.3/system/cythonExtensions/_pydevd_frame_eval_ext/pydevd_frame_evaluator.cpython-36m-x86_64-linux-gnu.so)
帧25:/usr/bin/python3.6()[0x508245]
帧#26:/usr/bin/python3.6()[0x50a080]
帧#27:/usr/bin/python3.6()[0x50aa7d]
第28帧:_PyEval_evalframefaulth+0x1220(0x50d390in/usr/bin/python3.6)
frame#29:+0x18d10(0x7fc6965ded10 in/home/rylan/.PyCharmCE2019.3/system/cythonExtensions/_-pydevd_frame_eval_ext/pydevd_frame_evaluator.cpython-36m-x86_64-linux-gnu.so)
帧30:/usr/bin/python3.6()[0x508245]
帧#31:_PyFunction_FastCallDict+0x2e2(0x509642 in/usr/bin/python3.6)
帧#32:/usr/bin/python3.6()[0x595311]
帧#33:/usr/bin/python3.6()
帧#34:/usr/bin/python3.6()[0x551b81]
帧35:_PyObject_FastCallKeywords+0x19c(在/usr/bin/python3.6中为0x5aa6ec)
帧36:/usr/bin/python3.6()[0x50abb3]
帧#37:_PyEval_evalframefaulth+0x1220(0x50d390in/usr/bin/python3.6)
frame#38:+0x18d10(0x7fc6965ded10 in/home/rylan/.PyCharmCE2019.3/system/cythonExtensions/_-pydevd_frame_eval_ext/pydevd_frame_evaluator.cpython-36m-x86_64-linux-gnu.so)
帧#39:/usr/bin/python3.6()[0x509d48]
帧#40:/usr/bin/python3.6()[0x50aa7d]
第41帧:_PyEval_EvalFrameDefault+0x449(在/usr/bin/python3.6中为0x50c5b9)
frame#42:+0x18d10(0x7fc6965ded10 in/home/rylan/.PyCharmCE2019.3/system/cythonExtensions/_-pydevd_frame_eval_ext/pydevd_frame_evaluator.cpython-36m-x86_64-linux-gnu.so)
帧#43:/usr/bin/python3.6()[0x508245]
帧#44:/usr/bin/python3.6()[0x516915]
帧45:/usr/bin/python3.6()[0x50a8af]
帧#46:_PyEval_evalframefaulth+0x449(0x50c5b9 in/usr/bin/python3.6)
frame#47:+0x18d10(0x7fc6965ded10 in/home/rylan/.PyCharmCE2019.3/system/cythonExtensions/_-pydevd_frame(框架)eval_ext/pydevd_frame(框架)evaluator.cpython-36m-x86_64-linux-gnu.so)
帧#48:/usr/bin/python3.6()[0x508245]
帧#49:/usr/bin/python3.6()[0x50a080]
帧#50:/usr/bin/python3.6()[0x50aa7d]
帧#51:_PyEval_evalframefaulth+0x449(0x50c5b9 in/usr/bin/python3.6)
frame#52:+0x18d10(0x7fc6965ded10 in/home/rylan/.PyCharmCE2019.3/system/cythonExtensions/_pydevd_frame(框架)eval_ext/pydevd_frame(框架)evaluator.cpython-36m-x86_64-linux-gnu.so)
帧#53:/usr/bin/python3.6()[0x509d48]
帧#54:/usr/bin/python3.6()[0x50aa7d]
帧#55:_PyEval_evalframefaulth+0x449(0x50c5b9 in/usr/bin/python3.6)
帧56:/usr/bin/python3.6()[0x508245]
帧#57:/usr/bin/python3.6()[0x50a080]
帧#58:/usr/bin/python3.6()[0x50aa7d]
帧#59:_PyEval_evalframefaulth+0x449(在/usr/bin/python3.6中为0x50c5b9)
帧60:/usr/bin/python3.6()[0x509d48]
帧#61:/usr/bin/python3.6()[0x50aa7d]
帧#62:_PyEval_evalframefaulth+0x449(0x50c5b9 in/usr/bin/python3.6)
帧#63:/usr/bin/python3.6()[0x508245]
发生错误,未保存任何图形
回溯(最近一次呼叫最后一次):
文件“/usr/lib/python3.6/contextlib.py”,第99行,在__
自我生成