【问题标题】:Editor in Spyder seems to be skipping lines of code in a function definitionSpyder 中的编辑器似乎正在跳过函数定义中的代码行
【发布时间】:2022-06-13 14:31:00
【问题描述】:

由于某种原因,这个函数跳过了一些代码行。在 Spyder (ver5.3.0) 编辑器窗口的一个单元格中的函数内部编写的某些代码行无法运行,但其他代码行运行良好。当我从 IPython 控制台运行相同的行时,它们工作得很好,但当我从编辑器窗口运行单元格时就不行了。 代码的 1st 3/4 运行完美,最后两个代码块(创建 Strts_Working 和 Strts_Tramming)只是不想从编辑器窗口运行。我必须手动剪切并粘贴到控制台以创建数据框以使其运行。

我检查了缩进,删除了空行,更改了代码块的顺序等,但结果保持不变。

代码如下:

def Power_State(PwrOff_thresh=20):

    global df, Strts_PwrOff, Strts_Standby, Strts_Wait, Strts_AllIdle, Strts_AllLoaded

    df['Tram_State']=np.nan
    df.loc[ ((df.Tram == 1) | (df.Tram == -1) | (df.TramOther == 1)) & (df.PumpI_State != 0), 'Tram_State']  =  1
    df.loc[ df.Tram_State != 1, 'Tram_State'] = 0
   
    # PwrOff
    df['Power_State']=np.nan
    df.loc[ (df.dT > PwrOff_thresh), 'Power_State'] = 0
    # Standby
    df.loc[ ((df.Power_State != 0) & (df.Pump_State == 0) & (df.Fan_State == 0) &
         (df.Conv_State == 0) & (df.Cut_State == 0) ),  'Power_State'] = 1
    # Waiting
    df.loc[ ((df.Power_State != 0) & (df.Power_State != 1) & (df.Pump_State > 0) & (df.Fan_State == 0) & (df.Conv_State == 0) &
         (df.Cut_State == 0) & (df.Tram_State == 0) ),  'Power_State'] = 2
    # Working
    df.loc[ ((df.Power_State != 0) & (df.Power_State != 1) & (df.Power_State != 2) & ((df.Pump_State >= 1) | (df.Fan_State >= 1) |
         (df.Conv_State >= 1) | (df.Cut_State >= 1) | (df.Tram_State != 0) )),  'Power_State'] = 3

    # Create Stop Start tables
    Strts_PwrOff = pd.DataFrame([])
    Strts_PwrOff['strt_time'] = df.index[(df.Power_State.shift(1) > 0) & (df.Power_State == 0)]
    Strts_PwrOff['stop_time'] = df.index[(df.Power_State.shift(1) == 0) & (df.Power_State > 0)]
    Strts_PwrOff['pwrOff_time'] = (Strts_PwrOff['stop_time'] - Strts_PwrOff['strt_time'])/pd.Timedelta(seconds=1)
    Strts_PwrOff.loc[:,'time_between_waits'] = (Strts_PwrOff.loc[:,'strt_time'].shift(-1) - Strts_PwrOff.loc[:,'stop_time'])/pd.Timedelta(seconds=1)

    Strts_Wait = pd.DataFrame([])
    Strts_Wait['strt_time'] = df.index[(df.Power_State.shift(1) != 2) & (df.Power_State == 2)]
    Strts_Wait['stop_time'] = df.index[(df.Power_State.shift(1) == 2) & (df.Power_State != 2)]
    Strts_Wait['pumpOn_time'] = (Strts_Wait['stop_time'] - Strts_Wait['strt_time'])/pd.Timedelta(seconds=1)
    Strts_Wait.loc[:,'time_between_pumpons'] = (Strts_Wait.loc[:,'strt_time'].shift(-1) - Strts_Wait.loc[:,'stop_time'])/pd.Timedelta(seconds=1)

    Strts_Working = pd.DataFrame([])
    Strts_Working['strt_time'] = df.index[(df.Power_State.shift(1) != 3) & (df.Power_State == 3)]
    Strts_Working['stop_time'] = df.index[(df.Power_State.shift(1) == 3) & (df.Power_State != 3)]
    Strts_Working['Strts_Working'] = (Strts_Working['stop_time'] - Strts_Working['strt_time'])/pd.Timedelta(seconds=1)
    Strts_Working.loc[:,'time_between_allidles'] = (Strts_Working.loc[:,'strt_time'].shift(-1) - Strts_Working.loc[:,'stop_time'])/pd.Timedelta(seconds=1)

    Strts_Tramming = pd.DataFrame([])
    Strts_Tramming['strt_time'] = df.index[ (df.Tram_State.shift(1)==0) & (df.Tram_State==1)]
    Strts_Tramming['stop_time'] = df.index[ (df.Tram_State.shift(1)==1) & (df.Tram_State==0)]
    Strts_Tramming['run_time'] = (Strts_Tramming['stop_time'] - Strts_Tramming['strt_time'])/pd.Timedelta(seconds=1)
    Strts_Tramming.loc[:,'time_between_runs'] = (Strts_Tramming.loc[:,'strt_time'].shift(-1) - Strts_Tramming.loc[:,'stop_time'])/pd.Timedelta(seconds=1)

    return

Power_State()

【问题讨论】:

  • 这里是 Spyder 维护者)我看到您在函数中使用了全局变量。对于那些在 Spyder 中工作的人,您需要转到菜单 Run > Configuration per file 并启用名为 Run in console's namespace instead of an empty one 的选项。
  • 谢谢卡洛斯。但这并没有帮助。最后的 Strts_Working 和 Strts_Tramming 块仍然不作为函数的一部分运行。
  • 我不知道会发生什么,抱歉。

标签: python function editor spyder


【解决方案1】:

我发现了问题。 (面部植物)。卡洛斯你是对的,没有运行的块是因为它们没有设置为全局变量......我添加并编辑了代码,这样做时忘记更新全局变量。

感谢您的帮助。 :)

【讨论】:

    猜你喜欢
    • 2017-03-12
    • 1970-01-01
    • 1970-01-01
    • 2021-08-21
    • 2022-06-10
    • 2018-09-27
    • 1970-01-01
    • 2014-06-24
    • 1970-01-01
    相关资源
    最近更新 更多