当使用 inspect
模块时,以下是上述特性的一些例子:
-
获取对象信息:
import inspect def example_function(a, b, c=0, *args, **kwargs): pass sig = inspect.signature(example_function) parameters = sig.parameters print("Function parameters:", list(parameters.keys()))
-
源代码分析:
import inspect def example_function(a, b, c=0): print("Hello, World!") source_code = inspect.getsource(example_function) print("Source code of the function:") print(source_code)
-
堆栈和帧:
import inspect def example_function(): stack = inspect.stack() frame = stack[0] print("Current function:", frame.function)
-
类层次结构:
import inspect class ParentClass: pass class ChildClass(ParentClass): pass subclasses = inspect.getmembers( inspect.getmodule(ParentClass), inspect.isclass ) print("Subclasses of ParentClass:", [name for name, _ in subclasses])
这些例子涵盖了 inspect
模块的不同特性,用于获取函数参数、源代码、堆栈信息以及类的继承关系。
在 except
块内部打印函数的参数名,你可以使用 inspect
模块来获取函数签名,然后提取参数名。以下是一个示例:
import inspect
def example_function(a, b, c=0):
# 产生一个异常
raise ValueError("An error occurred")
try:
example_function(1, 2, c=3)
except ValueError as e:
# 获取函数参数名
frame = inspect.currentframe()
args, _, _, values = inspect.getargvalues(frame)
arg_names = [name for name in args]
print("Function arguments in except block:", arg_names)
print("Exception message:", e)
在这个例子中,inspect.getargvalues
用于获取异常发生时函数的参数值,然后提取参数名并进行打印。请注意,这种方法可能在一些特殊情况下无法准确获取参数名,但对于一般情况应该是有效的。
book