Skip to content

Commit 5f60436

Browse files
committed
gh-142781: refactoring error message and deduplicating checks
1 parent 110351a commit 5f60436

File tree

2 files changed

+17
-17
lines changed

2 files changed

+17
-17
lines changed

Lib/test/test_zoneinfo/test_zoneinfo.py

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1588,9 +1588,12 @@ class ZI(self.klass):
15881588
# to override zoneinfo.Zoneinfo.__init_subclass__.
15891589
ZI._weak_cache = Cache()
15901590

1591-
with self.assertRaises(TypeError) as te:
1591+
with self.assertRaises(RuntimeError) as te:
15921592
ZI("America/Los_Angeles")
1593-
self.assertEqual(str(te.exception), "expected ZI, got int")
1593+
self.assertEqual(
1594+
str(te.exception),
1595+
"Unexpected instance of int in ZI weak cache for key 'America/Los_Angeles'"
1596+
)
15941597

15951598
def test_inconsistent_weak_cache_setdefault(self):
15961599
class Cache:
@@ -1605,9 +1608,13 @@ class ZI(self.klass):
16051608
# to override zoneinfo.Zoneinfo.__init_subclass__.
16061609
ZI._weak_cache = Cache()
16071610

1608-
with self.assertRaises(TypeError) as te:
1611+
with self.assertRaises(RuntimeError) as te:
16091612
ZI("America/Los_Angeles")
1610-
self.assertEqual(str(te.exception), "expected ZI, got int")
1613+
self.assertEqual(
1614+
str(te.exception),
1615+
"Unexpected instance of int in ZI weak cache for key 'America/Los_Angeles'"
1616+
)
1617+
16111618

16121619
class ZoneInfoPickleTest(TzPathUserMixin, ZoneInfoTestBase):
16131620
module = py_zoneinfo

Modules/_zoneinfo.c

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -335,27 +335,20 @@ zoneinfo_ZoneInfo_impl(PyTypeObject *type, PyObject *key)
335335
return NULL;
336336
}
337337

338+
((PyZoneInfo_ZoneInfo *)tmp)->source = SOURCE_CACHE;
338339
instance =
339340
PyObject_CallMethod(weak_cache, "setdefault", "OO", key, tmp);
340341
Py_DECREF(tmp);
341342
if (instance == NULL) {
342343
Py_DECREF(weak_cache);
343344
return NULL;
344345
}
345-
346-
if (!PyObject_TypeCheck(instance, type)) {
347-
PyErr_Format(PyExc_TypeError, "expected %s, got %s",
348-
type->tp_name, Py_TYPE(instance)->tp_name);
349-
Py_DECREF(instance);
350-
Py_DECREF(weak_cache);
351-
return NULL;
352-
}
353-
354-
((PyZoneInfo_ZoneInfo *)instance)->source = SOURCE_CACHE;
355346
}
356-
else if (!PyObject_TypeCheck(instance, type)) {
357-
PyErr_Format(PyExc_TypeError, "expected %s, got %s",
358-
type->tp_name, Py_TYPE(instance)->tp_name);
347+
348+
if (!PyObject_TypeCheck(instance, type)) {
349+
PyErr_Format(PyExc_RuntimeError,
350+
"Unexpected instance of %T in %s weak cache for key %R",
351+
instance, type->tp_name, key);
359352
Py_DECREF(instance);
360353
Py_DECREF(weak_cache);
361354
return NULL;

0 commit comments

Comments
 (0)