Guido has Spoken.  Restore strop.replace()'s treatment of a 0 count as
meaning infinity -- but at least warn about it in the code!  I pissed
away a couple hours on this today, and don't wish the same on the next
in line.
Bugfix candidate.
diff --git a/Lib/test/test_strop.py b/Lib/test/test_strop.py
index de7a795..9130088 100644
--- a/Lib/test/test_strop.py
+++ b/Lib/test/test_strop.py
@@ -77,7 +77,9 @@
 test('replace', 'one!two!three!', 'one@two@three!', '!', '@', 2)
 test('replace', 'one!two!three!', 'one@two@three@', '!', '@', 3)
 test('replace', 'one!two!three!', 'one@two@three@', '!', '@', 4)
-test('replace', 'one!two!three!', 'one!two!three!', '!', '@', 0)
+# CAUTION:  a replace count of 0 means infinity only to strop, not to the
+# string .replace() method or to the string.replace() function.
+test('replace', 'one!two!three!', 'one@two@three@', '!', '@', 0)
 test('replace', 'one!two!three!', 'one@two@three@', '!', '@')
 test('replace', 'one!two!three!', 'one!two!three!', 'x', '@')
 test('replace', 'one!two!three!', 'one!two!three!', 'x', '@', 2)