str: Throw TypeError for invalid index type and clean up comments.
diff --git a/py/objstr.c b/py/objstr.c
index 8e3e9d9..6a0721d 100644
--- a/py/objstr.c
+++ b/py/objstr.c
@@ -27,13 +27,11 @@
     const char *lhs_str = qstr_str(lhs->qstr);
     switch (op) {
         case RT_BINARY_OP_SUBSCR:
-            // string access
-            // XXX a massive hack!
-
             // TODO: need predicate to check for int-like type (bools are such for example)
             // ["no", "yes"][1 == 2] is common idiom
             if (MP_OBJ_IS_SMALL_INT(rhs_in)) {
                 // TODO: This implements byte string access for single index so far
+                // TODO: Handle negative indexes.
                 return mp_obj_new_int(lhs_str[mp_obj_get_int(rhs_in)]);
 #if MICROPY_ENABLE_SLICE
             } else if (MP_OBJ_IS_TYPE(rhs_in, &slice_type)) {
@@ -50,8 +48,9 @@
                 return mp_obj_new_str(qstr_from_strn_copy(lhs_str + start, stop - start));
 #endif
             } else {
-                // Throw TypeError here
-                assert(0);
+                // Message doesn't match CPython, but we don't have so much bytes as they
+                // to spend them on verbose wording
+                nlr_jump(mp_obj_new_exception_msg(rt_q_TypeError, "index must be int"));
             }
 
         case RT_BINARY_OP_ADD: