Python 循环困惑

标签 python loops openpyxl

我似乎对循环感到困惑,无法修复,我期望生成一个数据集,该数据集在我的 Excel 工作表中向右和向下移动,但由于某种原因,每个新行都会在第一行末尾被截断,因此我的回溯错误,尝试读取上面的空单元格。我希望能有一些新的视角来看待它,因为我后来的代码依赖于这个正确的输出,希望它能够解决全局经济衰退,或者不会,但会让我成为一个快乐的人。 :)

import datetime 
import random
import numpy as np
import math
import sys
from openpyxl import Workbook
from openpyxl.cell import get_column_letter
from openpyxl import load_workbook
from tempfile import TemporaryFile
from random import normalvariate, expovariate, seed, gammavariate
from math import sqrt
from itertools import groupby


for week in CurrentWeek:
    Global_counter = week

    i = Global_counter
    j = 52 + i

    if Global_counter == 1:

        for index in range(i,j,1):
            PlanWeek = index
            EC_D = 500.0
            if  EC_D <= 0:
                EC_D = EC_D *(-1)
            EC_PlanData.append(EC_D)
            d = sheet1.cell(row = Global_counter, column = PlanWeek)
            d2 = sheet2.cell(row = Global_counter, column = PlanWeek)
            d.value = EC_D
            d2.value = EC_D

    else:
        for index in range(i,j,1):
            PlanWeek = index
            DiffWeek = PlanWeek - Global_counter
            Sigma = 1
            mu = 0
            FC_VZ = random.normalvariate(mu, Sigma)
            if FC_VZ > 0:
               FC_VZ = 1
            FC_Error = FC_Error+RemainingFCError
            fcerr = sheet5.cell(row = Global_counter, column = PlanWeek)
            fcerr.value = FC_Error

            Prev_Week = Global_counter - 1
            ECDD1 = sheet1.cell(row=Prev_Week, column=PlanWeek).value
            ECDD2 = sheet1.cell(row=Prev_Week, column=PlanWeek).value
            EC_D = ECDD1 - (ECDD2*FC_Error)

            FC_Error = 0   
            ECPD = sheet1.cell(row = Global_counter, column=PlanWeek)
            ECPD.value = EC_D
            FCAD = sheet6.cell(row = Global_counter, column=PlanWeek)
            FCAD.value = FC_Error
            IEFD = sheet2.cell(row = Global_counter, column=PlanWeek)
            IEFD.value = EC_D
            EC_D = 0
        wb.save('RHF_Loop_test4py.xlsx')

我的回溯是:

Traceback (most recent call last):
File "C:\Python27\Darren Learning Samples\codetesting2.py", line 85, in <module>
EC_D = ECDD1 - (ECDD2*FC_Error)
TypeError: unsupported operand type(s) for *: 'NoneType' and 'float'

最佳答案

我完全不明白你想计算什么,但这是上述异常的原因。

首先,在第一个 for 循环中,在 Excel 文件中获取一行(第 #1 行),并填充该行中从第 #1 列到第 #52 列的列(索引从0开始):

稍后,在第二个 for 循环中,当您读取这些值时,您会增加全局计数器,因此当引发异常时,您将尝试读取第 53 周的值。

解决方案:代替

        ECDD1 = sheet1.cell(row=Prev_Week, column=PlanWeek).value
        ECDD2 = sheet1.cell(row=Prev_Week, column=PlanWeek).value
        EC_demand = ECDD1 - (ECDD2*FC_Error)

你可以

        ECDD1 = sheet1.cell(row=Prev_Week, column=DiffWeek).value
        ECDD2 = sheet1.cell(row=Prev_Week, column=DiffWeek).value
        EC_demand = ECDD1 - (ECDD2*FC_Error)

您实际上创建了 DiffWeek 变量,但忘记使用它。

关于Python 循环困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12105516/

相关文章:

python - 将 eval() 与 undefined variable 一起使用

javascript - 无法使用selenium在onclick中执行javascript

python - Apache2 错误日志。调用 'site.addsitedir()' 失败 '(null)' ,停止

arrays - 循环遍历数组并一次显示单个项目,并具有动态持续时间,例如react js中的setTimeout或SetInterval

python - 尝试使用 openpyxl 打开工作簿时出现 TypeError

python - 如何通过Python+Mingus设置多个乐器?

actionscript-3 - 在AS3中播放声音

javascript - 为什么这是无限循环?

python - 在 Python 中使用 openpyxl 将嵌套字典写入 Excel

long 类型的 Python 对象没有 Len() 错误?