Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 名称错误:名称';海拔高度';没有定义_Python - Fatal编程技术网

Python 名称错误:名称';海拔高度';没有定义

Python 名称错误:名称';海拔高度';没有定义,python,Python,我有一个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.WA

我有一个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
回溯(最近一次呼叫最后一次):
文件“gps messi.py”,第57行,在
高度=“%f”%(高度),
名称错误:未定义名称“高度”

有趣的是,代码有时工作得非常好,有时它会给我这个错误。我不明白我该怎么做才能让它一直正常工作。它是否和she-bang有关?

根据具体情况,会话中的报告似乎没有名为“aighty”的属性。如果属性“alt”存在,它将创建一个可变高度,允许代码工作。如果属性“alt”不存在,代码将失败。在if语句之前启动变量,它将正常工作。

根据具体情况,来自会话的报告似乎没有名为“高度”的属性。如果属性“alt”存在,它将创建一个可变高度,允许代码工作。如果属性“alt”不存在,代码将失败。在if语句之前启动变量,它将正常工作。

我同意@wesgur您在n
if
语句中启动
幅度
,但在某些情况下,如果不满足
语句的条件,并且程序没有
高度的定义,我同意@我们认为您在n
if
语句中启动了
ality
,但在某些情况下,如果该
语句的条件不满足,并且程序没有定义
高度,我猜
如果hasattr(report,'alt'):
没有解析为
True
,那么

if hasattr(report, 'alt'):
    altitude = report.alt
当您到达这里时,将不会为高度分配任何内容

journal.send(
    channel = 'gps',
    priority = journal.Priority.INFO,
    timestamp = "%f" % (timestamp),
    latitude = "%f" % (latitude),
    longitude = "%f" % (longitude), 
    altitude = "%f" % (altitude), 
    )
在分配高度之前,您基本上使用的是
高度。为了避免这种情况,您可以先将
高度
初始化为某个值,然后再使用

altitude=0

这样做将确保它在使用之前被分配,并且您不应该得到该错误。

我的猜测是
如果hasattr(report,'alt'):
没有解析为
True
,那么

if hasattr(report, 'alt'):
    altitude = report.alt
当您到达这里时,将不会为高度分配任何内容

journal.send(
    channel = 'gps',
    priority = journal.Priority.INFO,
    timestamp = "%f" % (timestamp),
    latitude = "%f" % (latitude),
    longitude = "%f" % (longitude), 
    altitude = "%f" % (altitude), 
    )
在分配高度之前,您基本上使用的是
高度。为了避免这种情况,您可以先将
高度
初始化为某个值,然后再使用

altitude=0
这样做将确保在使用之前分配该块,并且您不应该得到该错误。

移动该块

    timestamp = (time.time()*1000)
    latitude = 0
    longitude = 0 
    altitude = 0
if报告['class']='TPV'之前:
branch。 因此,您将始终初始化四个变量。

移动块

    timestamp = (time.time()*1000)
    latitude = 0
    longitude = 0 
    altitude = 0
if报告['class']='TPV'之前:
branch。
因此,您将始终初始化四个变量。

非常感谢大家。这就是我的代码现在的样子。我试过了,看起来不错。但如果我还在滑倒,有人能检查一下行日志的缩进吗?如果我所做的是正确的(我修改了一些变量的名称并增加了速度):


谢谢大家。这就是我的代码现在的样子。我试过了,看起来不错。但如果我还在滑倒,有人能检查一下行日志的缩进吗?如果我所做的是正确的(我修改了一些变量的名称并增加了速度):



在尝试格式化字符串之前,应始终检查是否定义了变量。当您试图从库中获取变量时,您无法保证该变量将被定义。可能是输入错误
if hasatr(报告“alt”):
应该是
hasattr
?顺便说一句,您的
else
只属于最后一个
if
。如果没有
速度属性,为什么要覆盖以前指定的时间戳、纬度、经度和高度?此代码似乎存在很多缩进问题。如果存在,为什么要忽略报告时间?在尝试格式化字符串之前,应始终检查变量是否已定义。当您试图从库中获取变量时,您无法保证该变量将被定义。可能是输入错误
if hasatr(报告“alt”):
应该是
hasattr
?顺便说一句,您的
else
只属于最后一个
if
。如果没有
速度属性,为什么要覆盖以前指定的时间戳、纬度、经度和高度?这段代码似乎有很多缩进问题。如果存在,为什么要忽略
report.time
?在if语句之前初始化变量或全局初始化变量?如果报告['class']=='TPV'
为真,但没有属性
“alt”
,该怎么办<代码>高度
在当前代码中保持未初始化状态,正如您已经看到的。是的,我知道了。但是我应该在哪里初始化呢?在if或GLOBALLY之前更好?我不认为在这种情况下会有任何区别。那么哪个更好?在if语句之前初始化变量或全局初始化变量?如果报告['class']=='TPV'
为真,但没有属性
“alt”
,该怎么办<代码>高度
在当前代码中保持未初始化状态,正如您已经看到的。是的,我知道了。但是我应该在哪里初始化呢?在if或GLOBALLY更好之前?我不认为在这种情况下会有任何区别。非常感谢Matt。那么哪一个更好呢?在if语句之前初始化变量还是全局初始化变量?我认为在if语句之前初始化就足够了。可能就在分配了
report
之后。事实上,对于
jou中使用的所有变量,您可能都应该这样做