if not lte.isattached() and 1.20.1.r1
You know how it is with some bugs, they are annoying but so hard to track down that you ignore them hoping they might be gone in the next firmware version. For reasons I don't understand 'if not lte.isattached()' on my gpy sometimes reports 0 when the modem is, in fact, attached. It's really annoying because it renders any attempt at re-attachment futile (you can't attach a modem that is already attached, even if it thinks it's not!).
Anyway I've found a workaround. modem=lte.send_at_cmd('AT+cind?').split(': '); service=modem gives service=1 if the modem is attached and service=0 if it's not & it's reliable.