self.assertNotIn(0, b)
self.assertIn(1, c)
self.assertNotIn(0, c)
- self.assertRaises(TypeError, lambda: 1 in a)
- self.assertRaises(TypeError, lambda: 1 not in a)
+ msg = "argument of type 'base_set' is not a container or iterable"
+ with self.assertRaisesRegex(TypeError, msg):
+ 1 in a
+ with self.assertRaisesRegex(TypeError, msg):
+ 1 not in a
# test char in string
self.assertIn('c', 'abc')
self.blob + self.blob
with self.assertRaisesRegex(TypeError, "unsupported operand"):
self.blob * 5
- with self.assertRaisesRegex(TypeError, "is not iterable"):
+ with self.assertRaisesRegex(TypeError, "is not.+iterable"):
b"a" in self.blob
def test_blob_context_manager(self):
PY_ITERSEARCH_COUNT: -1 if error, else # of times obj appears in seq.
PY_ITERSEARCH_INDEX: 0-based index of first occurrence of obj in seq;
set ValueError and return -1 if none found; also return -1 on error.
- Py_ITERSEARCH_CONTAINS: return 1 if obj in seq, else 0; -1 on error.
+ PY_ITERSEARCH_CONTAINS: return 1 if obj in seq, else 0; -1 on error.
*/
Py_ssize_t
_PySequence_IterSearch(PyObject *seq, PyObject *obj, int operation)
it = PyObject_GetIter(seq);
if (it == NULL) {
if (PyErr_ExceptionMatches(PyExc_TypeError)) {
- type_error("argument of type '%.200s' is not iterable", seq);
+ if (operation == PY_ITERSEARCH_CONTAINS) {
+ type_error(
+ "argument of type '%.200s' is not a container or iterable",
+ seq
+ );
+ }
+ else {
+ type_error("argument of type '%.200s' is not iterable", seq);
+ }
}
return -1;
}