簡體   English   中英

如何捕獲和管理GPS模塊的異常?

[英]How to catch and manage exceptions for GPS module?

我有一個使用GPS模塊的樹莓派。 要使用該模塊,我正在運行如下代碼:

##Prints the latitude and longitude every second.
import time
import microstacknode.hardware.gps.l80gps

if __name__ == '__main__':
    gps = microstacknode.hardware.gps.l80gps.L80GPS()
    while True:
        data = gps.get_gpgga()
        List = [list(data.values())[x] for x in [7, 9, 12]]
        string=str(List)
        string = string[1:-1]
        text_file = open("/home/pi/fyp/gps.txt","a")
        text_file.write(string + "\n")
        time.sleep(1)

但是,由於無法找到我的位置,它偶爾會出現此錯誤:

Traceback (most recent call last):
  File "gps.py", line 8, in <module>
    data = gps.get_gpgga()
  File "/usr/lib/python3/dist-packages/microstacknode/hardware/gps/l80gps.py", line 119, in get_gpgga
    pkt = self.get_nmea_pkt('GPGGA')
  File "/usr/lib/python3/dist-packages/microstacknode/hardware/gps/l80gps.py", line 293, in get_nmea_pkt
    "Timed out before valid '{}'.".format(pattern))
microstacknode.hardware.gps.l80gps.NMEAPacketNotFoundError: Timed out before valid 'GPGGA'.

出現該錯誤也可以。 我遇到的麻煩是,如果程序停止運行,它將停止運行。 有沒有一種方法可以捕獲該錯誤並使程序返回並重試,即使遇到此錯誤也可以重試?

UPDATE

if I try Stefan_Reinhardt's method, I would get the following error instead:

Traceback (most recent call last):
  File "gps.py", line 9, in <module>
    data = gps.get_gpgga()
  File "/usr/lib/python3/dist-packages/microstacknode/hardware/gps/l80gps.py", line 119, in get_gpgga
    pkt = self.get_nmea_pkt('GPGGA')
  File "/usr/lib/python3/dist-packages/microstacknode/hardware/gps/l80gps.py", line 293, in get_nmea_pkt
    "Timed out before valid '{}'.".format(pattern))
microstacknode.hardware.gps.l80gps.NMEAPacketNotFoundError: Timed out before valid 'GPGGA'.

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "gps.py", line 10, in <module>
    except NMEAPacketNotFoundError:
NameError: name 'NMEAPacketNotFoundError' is not defined

我同意Oisin的回答,但我建議僅將try-except子句放在可能發生的行周圍,並用continue語句傳遞其余while循環,這樣看起來

##Prints the latitude and longitude every second.
import time
import microstacknode.hardware.gps.l80gps

if __name__ == '__main__':
    gps = microstacknode.hardware.gps.l80gps.L80GPS()
    while True:
        try:
            data = gps.get_gpgga()
        except NMEAPacketNotFoundError:
            continue
        List = [list(data.values())[x] for x in [7, 9, 12]]
        string=str(List)
        string = string[1:-1]
        text_file = open("/home/pi/fyp/gps.txt","a")
        text_file.write(string + "\n")
        time.sleep(1)

這應該可以,但是可能會陷入無限遞歸循環中。

##Prints the latitude and longitude every second.
import time
import microstacknode.hardware.gps.l80gps

if __name__ == '__main__':
    getPos()

def getPos():
    try:
        while True:
            gps = microstacknode.hardware.gps.l80gps.L80GPS()
            data = gps.get_gpgga()
            List = [list(data.values())[x] for x in [7, 9, 12]]
            string=str(List)
            string = string[1:-1]
            text_file = open("/home/pi/fyp/gps.txt","a")
            text_file.write(string + "\n")
            time.sleep(1)
    except microstacknode.hardware.gps.l80gps.NMEAPacketNotFoundError:
        getPos()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM