summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGiampaolo Rodola <g.rodola@gmail.com>2022-01-07 12:55:07 +0100
committerGiampaolo Rodola <g.rodola@gmail.com>2022-01-07 12:55:07 +0100
commit24b560186482f02b830fbbbd09f9f09426d84114 (patch)
tree71b07b71cde8481f5776d800604983ed60e3998e
parent83d7067d7568f09ad95f094d17731e643a4a7ce6 (diff)
downloadpsutil-24b560186482f02b830fbbbd09f9f09426d84114.tar.gz
fix #2048: str(psutil.Error) raise AttributeError
Signed-off-by: Giampaolo Rodola <g.rodola@gmail.com>
-rw-r--r--HISTORY.rst2
-rw-r--r--psutil/_common.py2
-rwxr-xr-xpsutil/tests/test_misc.py11
3 files changed, 13 insertions, 2 deletions
diff --git a/HISTORY.rst b/HISTORY.rst
index 03656314..cef15236 100644
--- a/HISTORY.rst
+++ b/HISTORY.rst
@@ -5,6 +5,8 @@
**Bug fixes**
+- 2048_: ``AttributeError`` is raised if ``psutil.Error`` class is raised
+ manually and passed through ``str``.
- 2049_, [Linux]: `cpu_freq`_ erroneously returns ``curr`` value in GHz while
``min`` and ``max`` are in MHz.
diff --git a/psutil/_common.py b/psutil/_common.py
index bec8333f..540d2f2d 100644
--- a/psutil/_common.py
+++ b/psutil/_common.py
@@ -299,7 +299,7 @@ class Error(Exception):
["%s=%r" % (k, v) for k, v in info.items()])
else:
details = None
- return " ".join([x for x in (self.msg, details) if x])
+ return " ".join([x for x in (getattr(self, "msg", ""), details) if x])
def __repr__(self):
# invoked on `repr(Error)`
diff --git a/psutil/tests/test_misc.py b/psutil/tests/test_misc.py
index d946eb62..00bac13b 100755
--- a/psutil/tests/test_misc.py
+++ b/psutil/tests/test_misc.py
@@ -54,7 +54,7 @@ from psutil.tests import unittest
# ===================================================================
-class TestMisc(PsutilTestCase):
+class TestExceptionClasses(PsutilTestCase):
def test_process__repr__(self, func=repr):
p = psutil.Process(self.spawn_testproc().pid)
@@ -95,6 +95,12 @@ class TestMisc(PsutilTestCase):
def test_process__str__(self):
self.test_process__repr__(func=str)
+ def test_error__repr__(self):
+ self.assertEqual(repr(psutil.Error()), "psutil.Error()")
+
+ def test_error__str__(self):
+ self.assertEqual(str(psutil.Error()), "")
+
def test_no_such_process__repr__(self):
self.assertEqual(
repr(psutil.NoSuchProcess(321)),
@@ -161,6 +167,9 @@ class TestMisc(PsutilTestCase):
str(psutil.TimeoutExpired(5, pid=321, name="name")),
"timeout after 5 seconds (pid=321, name='name')")
+
+class TestMisc(PsutilTestCase):
+
def test_process__eq__(self):
p1 = psutil.Process()
p2 = psutil.Process()