gpt4 book ai didi

python - 如何检查使用 exec 创建的函数代码

转载 作者:行者123 更新时间:2023-11-28 17:36:34 26 4
gpt4 key购买 nike

我有一个函数,它是在另一个函数中使用 exec() 创建的,并作为参数传递给主程序。我怎样才能得到所述功能的代码?我尝试了 inspec.getsourcelines()inspec.getsource() 但出现以下错误

IOError: could not get source code

有解决办法吗?

MWE主文件:

#!/usr/bin/python
from ext import makeF
import inspect

f=makeF()
f()
inspect.getsource(f)

然后是外部文件:

def makeF():
script="def sayA():\n\tprint('Aah')"
exec(script)
return sayA

最佳答案

这是不可能的。我一直在挖掘并得出与 this answer 中概述的相同结论.

我不知道你的代码,但我认为在你的具体情况下你可以返回一个自定义对象,其中包含函数的源代码(你似乎有 - 你正在将它传递给 exec)以及实际的编译函数。您甚至可以利用 Python 的 __call__ 魔术方法来更好地模拟原始行为。这是一个示例:

class FunctionWithCode:
def __init__(self, source, func_name):
exec(source)
self.source = source
self.func = locals()[func_name]

def __call__(self, *args, **kwargs):
self.func(*args, **kwargs)

f = FunctionWithCode("def sayA():\n\tprint('Aah')", 'sayA')

f()

按预期打印 Aah。创建对象时您需要知道函数名称,但这对于您的示例代码是相同的。

关于python - 如何检查使用 exec 创建的函数代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29850508/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com