Python exec()无法执行的情况

在写LeetCode第6题发现exec函数在某些情况下无法执行。

Python版本3.10.0。

结论:可能是程序在函数内导致的无法执行

本人发现def 套for 可能会导致exec()函数有的能执行有的不能执行,比较玄学。

可以尝试去掉def ,将for和定义变量变为全局变量

过程

这是执行代码。执行失败

def convert(s,numRows):
    outcome="-"
    for i in range(numRows):
        exec(f"a{i}=''")
    for i,v in enumerate(s):
        i=i%numRows
        exec(f"a{i}=a{i}+v")
    for i in range(numRows):
        exec(f"outcome= outcome+a{i}")
    return outcome
print(convert("isfvseeibsib",3))

三个for循环执行exec,其中第一个和第二个可以执行第三个无法执行写入outcome。

调试发现确实如此可以写入到a[012]中

可下面执行exec却无法执行内部语句,导致outcome写入失败。

但当outcome使用list数组时,第三个for使用数组添加后可以正常执行

exec(f"outcome.append(a{i})")

同样的逻辑拿到函数外后,第三个for内的exec可以执行

s="isfvseeibsib"
numRows=3
outcome=""
for i in range(numRows):
    exec(f"a{i}=''")
for i,v in enumerate(s):
    i=i%numRows
    exec(f"a{i}=a{i}+v")
print(a0)
print(a1)
print(a2)
for i in range(numRows):
    exec(f"outcome+=a{i}")
print(outcome)

考虑过exec是在for内,可能导致定义变量时是局部变量而失败。经过测试,for套exec无影响。

产生BUG的原因是def套for套exec,去掉def可解决

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值