Python中的非typeerror与yield

2024-06-01 08:27:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我在Python中有一个关于产量和生成器的问题,希望您能知道解决方案

这是我的代码(非常简化)

!/usr/bin/env

import sys
import time
import subprocess
from Tkinter import *
import numpy
import threading

CDatei = subprocess.Popen("/home/pi/meinc++/Spi")
print("Hallo")

i = 0
x = 0


def GetValue():
        with open("/home/pi/meinc++/BeispielDatei.txt","r") as Datei:
                for line in Datei:
                    time.sleep(0.1)
                    return line

def WithoutNull(input):
    ReturnValue = input
    while ReturnValue is None:
            ReturnValue = GetValue()
    return ReturnValue

def UebergabeWert():
    while x == 0:
        WholeString = WithoutNull(GetValue())
        StringVar, DatumVar = WholeString.strip().split(' - ')
        IntStringVar = [int(v) for v in StringVar.split()]
        return IntStringVar,DatumVar

def MinutenWert():
    ArrayValue = []
    ZeitStart = time.time()
    i = 0
    while 1:
        CompleteValue, Datum = UebergabeWert()
        ArrayValue.insert(i,CompleteValue[0])
        i = i + 1
        ZeitEnde = time.time()
        if (ZeitEnde-ZeitStart >= 10):
            LaengeArray = len(ArrayValue)
            print ArrayValue
            ArrayValue = []
            i = 0
            break


    while i <= LaengeArray:
        CompleteValue, Datum = UebergabeWert()
        ArrayValue.insert(i,CompleteValue[0])
        i = i + 1
        ArraySumme = numpy.sum(ArrayValue)
        LaengeArray = len(ArrayValue)
        Mittelwert = ArraySumme/LaengeArray
        print ArrayValue
        print ArraySumme
        print LaengeArray

        yield Mittelwert

        if i == LaengeArray:
            i = 0

xx = MinutenWert()
    for x in xx:
        print x

代码快速解释:

我有一个传感器,我正在从UebergabeWert()中读取数据。但是,由于我想计算一分钟的平均值,所以我开始执行以下操作:我将数据放入一个数组中60秒(在代码中它是10,因为我不想等待太长时间),然后我将数组求和并除以数组的长度。在

第一个while循环是设置数组的总长度(因为我不能使我的主循环依赖于时间,因为当传感器速度较慢时,它会扰乱数据),第二个循环是设置平均值。其思想是:当数组到达它的末尾时,它将删除第一个值并插入最新的值。循环应该无限期地运行,我很快就会实现线程化,这样它就可以在后台运行了。在

附言:“指纹”在这里让我跟踪整个过程

我的问题是:

第一个循环工作得很好,数组在数组中打印出大约100个(不同的)值,没有一个值。在

然而,第二个循环在第一次迭代之后中断。在

错误消息:

^{pr2}$

为什么突然出现非类型错误?我就是搞不懂。在

编辑: 人们指出问题在于代码的前一个函数,所以我将它添加到代码中。在

另外,快速解释:数据在文本文件中,所以我用GetValue()打开文本文件。有时传感器速度太慢,会返回一个None值,因此WithoutNull()会消除该值。在

数据的格式为“var1,var2,var3,var4-timestamp”。所以我需要用UebergabeWert()将值从字符串中分离出来。我通常不会得到奇怪的回应。在


Tags: 数据代码importfortimedef数组print
1条回答
网友
1楼 · 发布于 2024-06-01 08:27:13

问题是。。。在

^{1}$

它不返回任何值,因为未调用收益率。要获得收益值,必须使用next()。在

更新版本。。。。在

^{pr2}$

返回值并且不返回错误。在

相关问题 更多 >