从另一个python脚本执行python文件,如果python文件具有嵌套函数,则执行失败

2024-10-03 17:21:51 发布

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

我正在创建一个python脚本来执行I2C读写。该脚本还处理测试脚本(也是python)以发送硬件。 以前的测试脚本是通过GUI发送的,但我的脚本通过GUI使用并直接与I2C驱动程序对话。 如果测试脚本是平面的,则没有问题。但是,如果存在嵌套函数或全局变量,则会出现错误:

def main():
    board=usb2any()
    board.ReadI2C(0x58,0x0)
    board.WriteI2C(0x58,0xBC,0x40)
    execfile(f1)
if __name__ == "__main__":
    main()

测试代码“f1”,如果它只包含如下代码,则运行正常

board.ReadI2C(0x58,0x2)
board.WriteI2C(0x58,0x20,0x10)

但是,如果它看起来像这样: 测试脚本示例1

V1=0
def fun1():
    if V1==1: # error here saying global variable V1 not defined

失败案例的另一个例子: 测试脚本示例2

ff(0x10,0x9)
def ff(v1,v2):
    fun2(v1)   #Error here saying fun2 not defined

def fun2(vv): vv=0

你知道怎么解决这个问题吗?最好不要接触测试脚本,因为这些脚本已与GUI一起使用


Tags: board脚本示例ifheremaindefgui
3条回答

示例2不起作用,因为您在声明函数之前调用了它。请尝试以下方法:

def ff(v1,v2): 
    fun2(v1) 
ff(0x10,0x9)

示例2需要重新排列,以便在调用函数之前定义它们。如果要相互调用许多函数,可能需要创建一个类

def fun2(vv): 
    vv=0

def ff(v1,v2): 
    fun2(v1)

`

以下是哪些有效,哪些无效: 对于测试脚本示例1,需要在测试脚本中添加全局 全球V1 V1=0 def fun1(): 如果V1==1:#现在没有错误

失败案例的另一个例子: 改变序列的测试脚本示例2仍然失败

def fun2(x):
    x = 0

def ff(vv):
    fun2(vv)
ff(2) #when calling ff, error saying no fun2 defined

打印输出信息:

回溯(最近一次呼叫最后一次):

文件“c:\Users\a0272122\Documents\Python Scripts\I2C\u USB2Any\I2C\u wr.py”,第68行,在 main()

文件“c:\Users\a0272122\Documents\Python Scripts\I2C\u USB2Any\I2C\u wr.py”,主目录第42行 execfile(文件名)

文件“pattern_test.py”,第122行,在 apb_read_modifywrite(0x1A4、0x000000E0、0x00000020)

文件“pattern_test.py”,第113行,在apb_read_modifywrite中 读取数据=apb\U读取记录(addr16b)

名称错误:未定义全局名称“apb\U read\U reg”

相关问题 更多 >