I'm new in python, so please bear with me. I wrote a script to check the carrier name on my 3G dongle with python-pyserial basically it looks like this:
def get_operator():
ID_OPSEL=('51011:XL-Axiata','51010:Telkomsel','51089:Three','51001:Indosat','INDOSAT:Indosat','51008:Axis','TELKOMSEL:Telkomsel')
if TYPE=="ZTE":
resp=send_at_wait('AT+COPS?','+COPS:',3)
if resp<>"TIMEOUT":
resp=get_value(resp,'+COPS:')
return resp.spilt('"')[1]
else:
resp= send_at_wait("AT+COPS?; +COPS?\r","+COPS:",3)
if resp<>"TIMEOUT":
resp=get_value(resp,'+COPS:')
resp=resp.split(',')
if len(resp)>2:
resp=resp[2].replace('"','')
for ln in ID_OPSEL:
if ln.find(resp)<>-1:
return ln.split(':')[1]
else:
return "Not Registered"
op=get_operator()
if "Not Registered" in op:
print "No Signal"
else:
print "Operator Name: " + op
When there's a reception it all works fine but when there's no reciption the script returns:
Traceback (most recent call last):
File "/usr/bin/gsm", line 639, in <module>
if "Not Registered" in op:
TypeError: argument of type 'NoneType' is not iterable
How do I fix it ?
You get this error because you check if op contains the string "Not Registered", when op is actually None in runtime on the particular run that failed.
You should check whether op is None before you use it in the if and else clauses.
Something like this would handle this case:
if op is None:
print "No operator"
if "Not Registered" in op:
print "No Signal"
else:
print "Operator Name: " + op
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With