

私は現在gpsモジュールを使用しており、緯度と経度のデータを抽出したいと考えています。
しかし、プログラムを実行すると、最初は問題ないように見えますが、ある時点で停止し、このエラーが表示されます。

これが私のプログラムです。

[code]

    stream = Serial('com5', 9600)
    t1 = time.time()
    
    while True:
        ubr = UBXReader(stream)
        (raw_data, parsed_data) = ubr.read()
    
        #extract latitude and longitude data from parsed data
        if str(raw_data[0:6]) == "b'$GNRMC'":
            
            lat = parsed_data.lat
            lon = parsed_data.lon
            
            #declare latitude and longitude into string
            gps1 = str(lat)
            gps2 = str(lon)
        
        #measure finish time
        t2 = time.time()        
        elapsed_time = t2 - t1
        print(elapsed_time, gps1, gps2)
        
        #measure the time data every 100ms
        time.sleep(0.1)
    
[/code]


CC BY-SA 4.0
2022-03-23T01:21:27.093
87976
2022-10-12T12:04:00.523
2022-03-23T01:28:42.420
3060
51921
question
python python3 gps
このエラーを修正するにはどうすればよいですか？ TypeError: 'NoneType' object is not subscriptable


スタックオーバーフローへようこそ！  
エラーが何行目で発生しているかがお手元ではわかるかと思いますが、  
コードを拝見する限り、リストを正常に取得できず、  
リストのスライスをとる箇所でエラーが発生してしまっていると考えられます。

主な原因としてはubr.read()の実行頻度が高くなってしまい、シリアルポートにデータが入りきっていないことで、おそらくリストを取得できていないかと思われます。リストが正常に取得できているかを確認するif文をraw_dataの取得直後に加えて、異常であれば以降の処理をスキップしてsleepすれば解決すると思います。

[code]

    stream = Serial('com5', 9600)
    t1 = time.time()
    
    while True:
        ubr = UBXReader(stream)
        # ここでraw_dataが正常に取得できていない
        (raw_data, parsed_data) = ubr.read()
    
        #extract latitude and longitude data from parsed data
        # おそらくここでエラーが発生している
        if str(raw_data[0:6]) == "b'$GNRMC'":
            
            lat = parsed_data.lat
            lon = parsed_data.lon
            
            #declare latitude and longitude into string
            gps1 = str(lat)
            gps2 = str(lon)
        
        #measure finish time
        t2 = time.time()        
        elapsed_time = t2 - t1
        print(elapsed_time, gps1, gps2)
        
        #measure the time data every 100ms
        time.sleep(0.1)
    
    
[/code]


CC BY-SA 4.0
2022-03-23T01:47:42.903
87977
2022-03-23T01:47:42.903
51317
87976
answer