从另一个 .py 脚本执行 .py 脚本时未定义 Python NameError 'xxx'

时间:2021-02-07 11:27:14

标签: python nameerror

我有一个名为 schedule.py 的脚本:

# Script to schedule and trigger batch run every day of month at 6.30p.m.

from datetime import date
import time
import schedule

def job():
    exec(open("main.py").read())
    print('Batch run completed')
        
schedule.every().day.at("18:30").do(job)

while True:
    schedule.run_pending()
    time.sleep(1)

schedule.py 将执行另一个 Python 脚本 main.py

main.py 用于处理数据,所以涉及到pandas、numpy。 当我直接运行 main.py 时,根本没有错误。但是当我尝试通过 main.py 运行 schedule.py 时,它返回错误:

NameError: ("name 'np' is not defined", 'occurred at index 0')

在那之后,我添加了

import numpy as py

进入schedule.py解决上面的错误。

但是解决了np未定义错误后,通过main.py执行schedule.py时又出现一个错误:

NameError: name 'avg_util_l3m' is not defined

这个变量avg_util_l3m是在main.py中使用的一个变量。 main.py 中使用变量的部分如下:

# lots of code...

avg_util_l3m = joined_df['AverageUtilizationL3M']
avg_util_l3m = joined_df['ProdType'].apply(lambda x: avg_util_l3m if x != 'Non-Revolving' else -9999)

# lots of code...

有谁知道为什么会发生这个错误,我该如何解决?

注意:

  1. 直接在 cmd 中运行 main.py 时完全没有错误。所以我认为 npavg_util_l3mmain.py 中的定义是正确的。

  2. schedule.py 的完整代码如上。它不包含 npavg_util_l3m 之类的变量。只有 main.py 使用变量。

1 个答案:

答案 0 :(得分:1)

我过去遇到过类似的问题,我只能告诉你 exec() 很慢且不可预测,使用其他任何东西,我怀疑你会遇到同样的错误。如果您的代码太长而无法简单导入,请尝试使用 runpy 等替代方法。