为一个项目处理多个 python 文件时输出错误
Wrong output when dealing with multiple python files for one project
抱歉,如果我问了一个愚蠢的问题或犯了一个明显的错误,因为 OOPS 不是我的强项!
我有一个项目正在使用 Python。我已经在一个函数中编写了所有代码,它按预期工作,提供了正确的输出数据帧。
但是当我尝试将一个函数分解为多个函数时,所有函数都存在于不同的 .py 文件中,所有文件都存在于一个本地目录中,然后输出会发生变化。然后输出数据框包含所有 nan 值.
main.py (only one file which contains all the code)
def fn():
.
.
.
return x
这里的 x 是预期的结果并且有效。但如果我这样做:
sub_module1.py (file #1)
class a:
def __init__(self):
pass:
def fn1(self, para1):
.
.
return x
sub_module2.py (file #2)
class b:
def__init__(self):
pass:
def fn2(self, para2):
.
.
return y
main.py (file #3)
from sub_module1 import a
from sub_module2 import b
x1 = a().fn1(para1)
x2 = b().fn2(para2)
def fn3(some parameters):
# some logic which makes use of x1 and x2
return new_x
new_x 具有 nan 值,这对我来说没有意义,因为 代码与 main.py 中使用的代码相同。唯一的区别是,我没有对整个代码使用 一个函数 ,而是将代码分解为 存储在不同 python 中的多个函数文件,但在同一目录中,然后我将这些函数调用到一个 python 文件(main.py) 中以获取输出。
感谢任何帮助!
据我所知,fn3()
内部的逻辑或您调用 fn3()
的方式存在问题。
如果你调用fn3()
如下图-
# main.py (file #3)
from sub_module1 import a
from sub_module2 import b
x1 = a().fn1(para1)
x2 = b().fn2(para2)
def fn3(some parameters):
# some logic which makes use of x1 and x2
return new_x
if __name__ == '__main__':
new_x = fn3(some parameters)
然后会发生的是 x1
和 x2
值将不会有您的方法返回的值,因为它们的初始化是在 f3()
的范围之外完成的。另外,我希望 some parameters
包括 x1
和 x2
。如果没有,最好确保您明确地这样做了。我会重写您的代码以执行以下操作 -
# main.py (file #3)
from sub_module1 import a
from sub_module2 import b
def fn3(some parameters, x1, x2):
# some logic which makes use of x1 and x2
return new_x
if __name__ == '__main__':
x1 = a().fn1(para1)
# print(x1) for sanity checking.
x2 = b().fn2(para2)
# print(x2) for sanity checking.
new_x = fn3(some parameters, x1, x2)
另一种方法是在 fn3()
中获取 x1
和 x2
的值。那么您的代码将如下所示 -
# main.py (file #3)
from sub_module1 import a
from sub_module2 import b
def fn3(some parameters):
x1 = a().fn1(para1)
# print(x1) for sanity checking.
x2 = b().fn2(para2)
# print(x2) for sanity checking.
# some logic which makes use of x1 and x2
return new_x
if __name__ == '__main__':
new_x = fn3(some parameters)
如果这仍然是 returns new_x
作为 NAN
值,我会逐行调试 fn3()
内部发生的事情,因为问题肯定在那里。
抱歉,如果我问了一个愚蠢的问题或犯了一个明显的错误,因为 OOPS 不是我的强项!
我有一个项目正在使用 Python。我已经在一个函数中编写了所有代码,它按预期工作,提供了正确的输出数据帧。
但是当我尝试将一个函数分解为多个函数时,所有函数都存在于不同的 .py 文件中,所有文件都存在于一个本地目录中,然后输出会发生变化。然后输出数据框包含所有 nan 值.
main.py (only one file which contains all the code)
def fn():
.
.
.
return x
这里的 x 是预期的结果并且有效。但如果我这样做:
sub_module1.py (file #1)
class a:
def __init__(self):
pass:
def fn1(self, para1):
.
.
return x
sub_module2.py (file #2)
class b:
def__init__(self):
pass:
def fn2(self, para2):
.
.
return y
main.py (file #3)
from sub_module1 import a
from sub_module2 import b
x1 = a().fn1(para1)
x2 = b().fn2(para2)
def fn3(some parameters):
# some logic which makes use of x1 and x2
return new_x
new_x 具有 nan 值,这对我来说没有意义,因为 代码与 main.py 中使用的代码相同。唯一的区别是,我没有对整个代码使用 一个函数 ,而是将代码分解为 存储在不同 python 中的多个函数文件,但在同一目录中,然后我将这些函数调用到一个 python 文件(main.py) 中以获取输出。
感谢任何帮助!
据我所知,fn3()
内部的逻辑或您调用 fn3()
的方式存在问题。
如果你调用fn3()
如下图-
# main.py (file #3)
from sub_module1 import a
from sub_module2 import b
x1 = a().fn1(para1)
x2 = b().fn2(para2)
def fn3(some parameters):
# some logic which makes use of x1 and x2
return new_x
if __name__ == '__main__':
new_x = fn3(some parameters)
然后会发生的是 x1
和 x2
值将不会有您的方法返回的值,因为它们的初始化是在 f3()
的范围之外完成的。另外,我希望 some parameters
包括 x1
和 x2
。如果没有,最好确保您明确地这样做了。我会重写您的代码以执行以下操作 -
# main.py (file #3)
from sub_module1 import a
from sub_module2 import b
def fn3(some parameters, x1, x2):
# some logic which makes use of x1 and x2
return new_x
if __name__ == '__main__':
x1 = a().fn1(para1)
# print(x1) for sanity checking.
x2 = b().fn2(para2)
# print(x2) for sanity checking.
new_x = fn3(some parameters, x1, x2)
另一种方法是在 fn3()
中获取 x1
和 x2
的值。那么您的代码将如下所示 -
# main.py (file #3)
from sub_module1 import a
from sub_module2 import b
def fn3(some parameters):
x1 = a().fn1(para1)
# print(x1) for sanity checking.
x2 = b().fn2(para2)
# print(x2) for sanity checking.
# some logic which makes use of x1 and x2
return new_x
if __name__ == '__main__':
new_x = fn3(some parameters)
如果这仍然是 returns new_x
作为 NAN
值,我会逐行调试 fn3()
内部发生的事情,因为问题肯定在那里。