diff --git a/Lib/test/test_pdb.py b/Lib/test/test_pdb.py
index edc9e75..ec8346c 100644
--- a/Lib/test/test_pdb.py
+++ b/Lib/test/test_pdb.py
@@ -677,10 +677,12 @@
     ...     import pdb; pdb.Pdb(nosigint=True).set_trace()
     ...     it = test_gen()
     ...     try:
-    ...         assert next(it) == 0
+    ...         if next(it) != 0:
+    ...             raise AssertionError
     ...         next(it)
     ...     except StopIteration as ex:
-    ...         assert ex.value == 1
+    ...         if ex.value != 1:
+    ...             raise AssertionError
     ...     print("finished")
 
     >>> with PdbTestInput(['step',
@@ -699,7 +701,7 @@
     -> try:
     (Pdb) step
     > <doctest test.test_pdb.test_pdb_next_command_for_generator[1]>(5)test_function()
-    -> assert next(it) == 0
+    -> if next(it) != 0:
     (Pdb) step
     --Call--
     > <doctest test.test_pdb.test_pdb_next_command_for_generator[0]>(1)test_gen()
@@ -716,7 +718,7 @@
     -> return 1
     (Pdb) step
     StopIteration: 1
-    > <doctest test.test_pdb.test_pdb_next_command_for_generator[1]>(6)test_function()
+    > <doctest test.test_pdb.test_pdb_next_command_for_generator[1]>(7)test_function()
     -> next(it)
     (Pdb) continue
     finished
@@ -735,10 +737,12 @@
     ...     import pdb; pdb.Pdb(nosigint=True).set_trace()
     ...     it = test_gen()
     ...     try:
-    ...         assert next(it) == 0
+    ...         if next(it) != 0:
+    ...             raise AssertionError
     ...         next(it)
     ...     except StopIteration as ex:
-    ...         assert ex.value == 1
+    ...         if ex.value != 1:
+    ...             raise AssertionError
     ...     print("finished")
 
     >>> with PdbTestInput(['step',
@@ -756,21 +760,21 @@
     -> try:
     (Pdb) step
     > <doctest test.test_pdb.test_pdb_return_command_for_generator[1]>(5)test_function()
-    -> assert next(it) == 0
+    -> if next(it) != 0:
     (Pdb) step
     --Call--
     > <doctest test.test_pdb.test_pdb_return_command_for_generator[0]>(1)test_gen()
     -> def test_gen():
     (Pdb) return
     StopIteration: 1
-    > <doctest test.test_pdb.test_pdb_return_command_for_generator[1]>(6)test_function()
+    > <doctest test.test_pdb.test_pdb_return_command_for_generator[1]>(7)test_function()
     -> next(it)
     (Pdb) step
-    > <doctest test.test_pdb.test_pdb_return_command_for_generator[1]>(7)test_function()
+    > <doctest test.test_pdb.test_pdb_return_command_for_generator[1]>(8)test_function()
     -> except StopIteration as ex:
     (Pdb) step
-    > <doctest test.test_pdb.test_pdb_return_command_for_generator[1]>(8)test_function()
-    -> assert ex.value == 1
+    > <doctest test.test_pdb.test_pdb_return_command_for_generator[1]>(9)test_function()
+    -> if ex.value != 1:
     (Pdb) continue
     finished
     """
