2016-05-22 21 views
0

私はPythonで新しくなっていますので、私にご負担ください。私は基本的にはこのようになりますpython-pyserialと私の3Gドングルにキャリア名を確認するためのスクリプトを書いた:Python - TypeError: 'NoneType'型の引数が反復不可能です

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 

受信すべてが正常に動作しますが、何のreciptionはありませんときにスクリプトが返されますがあります:

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 

どうすれば修正できますか?

答えて

0

opopが失敗した特定の実行時に実際にNoneランタイムである文字列"Not Registered"を、含まれているかどうかをチェックため、このエラーが発生します。

ifおよびelse句で使用する前に、opNoneであるかどうかを確認する必要があります。

このような何かが、このケースを処理します:

if op is None: 
    print "No operator" 

if "Not Registered" in op: 
    print "No Signal" 
else: 
    print "Operator Name: " + op 
0

あなたopは常に文字列を返しません。

など。 TYPE <> "ZTE"とresp == "TIMEOUT"がの場合、デフォルトでは値Noneが返されます。

関連する問題