我有这个gps代码,它获取gps数据并写入日志:
#!/usr/bin/python
from systemd import journal
import gps
import time
import threading
import datetime
# Listen on port 2947 (gpsd) of localhost
session = gps.gps("localhost", "2947")
session.stream(gps.WATCH_ENABLE | gps.WATCH_NEWSTYLE)
while True:
try:
report = session.next() # Wait for a 'TPV' report and display
the current time
# To see all report data, uncomment the line below
#print report
if report['class'] == 'TPV':
if hasattr(report, 'time'):
timestamp = (time.time()*1000)
#print timestamp
if hasattr(report, 'lat'):
latitude = report.lat
#print latitude
if hasattr(report, 'lon'):
longitude = report.lon
#print longitude
if hasattr(report, 'alt'):
altitude = report.alt
#print altitude
else:
timestamp = (time.time()*1000)
latitude = 0
longitude = 0
altitude = 0
journal.send(
channel = 'gps',
priority = journal.Priority.INFO,
timestamp = "%f" % (timestamp),
latitude = "%f" % (latitude),
longitude = "%f" % (longitude),
altitude = "%f" % (altitude),
)
except KeyError:
pass
except KeyboardInterrupt:
quit()
except StopIteration:
session = None
print "GPSD has terminated"我得到了这个错误:
Traceback (most recent call last):
File "gps-messi.py", line 57, in <module>
altitude = "%f" % (altitude),
NameError: name 'altitude' is not defined有趣的是,代码有时工作得很好,有时会给我这个错误。我不明白我应该怎么做才能让它一直正确地工作。是不是跟她的大爆炸有关?
发布于 2018-08-28 23:03:08
我的猜测是if hasattr(report, 'alt'):不会解析为True,那么
if hasattr(report, 'alt'):
altitude = report.alt当您到达此处时,不会将任何内容分配给altitude和那里
journal.send(
channel = 'gps',
priority = journal.Priority.INFO,
timestamp = "%f" % (timestamp),
latitude = "%f" % (latitude),
longitude = "%f" % (longitude),
altitude = "%f" % (altitude),
)在分配altitude之前,您实际上是在使用它。要避免这种情况,可以使用以下命令将altitude初始化为某个值
altitude=0这样做将确保在使用它之前分配它,并且您不应该得到该错误。
发布于 2018-08-28 22:48:39
根据情况,会话中的报告似乎没有名为“高度”的属性。如果属性'alt‘存在,它会创建一个允许代码工作的可变高度。如果属性'alt‘不存在,代码将失败。在if语句之前初始化变量,它将正常工作。
发布于 2018-08-28 23:02:37
我同意@wesgur您在n if语句内容中启动alititude,但在某些情况下,该if语句的条件不满足,并且程序没有定义altitude
https://stackoverflow.com/questions/52060580
复制相似问题