Python - TypeError:类型' NoneType'的参数不可迭代

时间:2016-05-22 13:04:24

标签: python nonetype

我是蟒蛇新手,所以请耐心等待。我写了一个脚本来检查我的3G加密狗上的运营商名称python-pyserial基本上它看起来像这样:

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

如果有接待处,一切正常,但如果没有收件人,则脚本会返回:

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

我该如何解决?

3 个答案:

答案 0 :(得分:1)

您收到此错误是因为您检查op是否包含字符串"Not Registered",当op在运行时实际上None失败的特定运行时。

opNone条款中使用if之前,您应检查else是否为if op is None: print "No operator" if "Not Registered" in op: print "No Signal" else: print "Operator Name: " + op

这样的事情会处理这种情况:

datagridView 1

答案 1 :(得分:0)

您的op并不总是返回字符串。

E.g。当 TYPE&lt;&gt;&#34; ZTE&#34;并且resp ==&#34; TIMEOUT&#34; ,它将(默认情况下)返回值None。

答案 2 :(得分:0)

您可以像这样使用它

op=get_operator()
try:
  if "Not Registered" in op:
     print "No Signal"
  else:
     print "Operator Name: " + op
except:
  print("Error occored")