在写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可解决