Merge pull request #4946 from soltanmm/doctor-calling-doctor

Fix Python diagnostics dying on bad diagnosis
diff --git a/src/python/grpcio/commands.py b/src/python/grpcio/commands.py
index a6b8ad3..3e3c72f 100644
--- a/src/python/grpcio/commands.py
+++ b/src/python/grpcio/commands.py
@@ -323,7 +323,7 @@
     except KeyboardInterrupt:
       raise
     except Exception as error:
-      support.diagnose_build_ext_error(self, error)
+      support.diagnose_build_ext_error(self, error, traceback.format_exc())
       raise CommandError("Failed `build_ext` step.")
 
 
diff --git a/src/python/grpcio/support.py b/src/python/grpcio/support.py
index bbc5096..96d9cbf 100644
--- a/src/python/grpcio/support.py
+++ b/src/python/grpcio/support.py
@@ -76,16 +76,23 @@
         "Diagnostics found a compilation environment issue:\n{}"
             .format(error_message))
 
-def diagnose_build_ext_error(build_ext, error):
-  {
-      errors.CompileError: diagnose_compile_error
-  }[type(error)](build_ext, error)
-
 def diagnose_compile_error(build_ext, error):
   """Attempt to run a few test files through the compiler to see if we can
      diagnose the reason for the compile failure."""
   for c_check, message in C_CHECKS.items():
     _expect_compile(build_ext.compiler, c_check, message)
-  raise commands.CommandError(
-      "\n\nWe could not diagnose your build failure. Please file an issue at "
-      "http://www.github.com/grpc/grpc with `[Python install]` in the title.")
+
+_ERROR_DIAGNOSES = {
+    errors.CompileError: diagnose_compile_error
+}
+
+def diagnose_build_ext_error(build_ext, error, formatted):
+  diagnostic = _ERROR_DIAGNOSES.get(type(error))
+  if diagnostic is None:
+    raise commands.CommandError(
+        "\n\nWe could not diagnose your build failure. Please file an issue at "
+        "http://www.github.com/grpc/grpc with `[Python install]` in the title."
+        "\n\n{}".format(formatted))
+  else:
+    diagnostic(build_ext, error)
+