From 7b1ebf50c9686dacf5fb5036168a9110ae0add32 Mon Sep 17 00:00:00 2001 From: Sergei Lebedev Date: Thu, 20 Jun 2019 13:04:08 -0700 Subject: [PATCH] Do not assume hasattr is available in Metric.__del__ Python does not guarantee that builtins are available by the time __del__ is called, so using hasattr is unsafe. PiperOrigin-RevId: 254255638 --- tensorflow/python/eager/monitoring.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/tensorflow/python/eager/monitoring.py b/tensorflow/python/eager/monitoring.py index c022b9749b4..09838f143e0 100644 --- a/tensorflow/python/eager/monitoring.py +++ b/tensorflow/python/eager/monitoring.py @@ -121,10 +121,14 @@ class Metric(object): self._metric = self._metric_methods[self._label_length].create(*args) def __del__(self): - if hasattr(self, '_metric'): + try: deleter = self._metric_methods[self._label_length].delete - if deleter is not None: - deleter(self._metric) + metric = self._metric + except AttributeError: + return + + if deleter is not None: + deleter(metric) def get_cell(self, *labels): """Retrieves the cell."""