访问 variable/argument 的名称
Accessing the name of a variable/argument
我正在 Python 中编写一个函数来计算一些东西,如果我的函数的参数类型不正确,它就会失败。所以我想在发生这种情况时提出错误。
def do_stuff(x):
if not isinstance(x, int):
raise ValueError(f'Argument {x} is not int')
pass
但是,打印的是x
的内容,而不是x
的名字,这对调试很有用。在实际情况下,x
需要是 pandas.Series
但有时会应用于 pandas.DataFrame
。打印 DataFrame 的内容对于错误跟踪完全没有用。
我正在做更像这样的事情,并使用行号跟踪错误。但是有变量名会很棒
raise ValueError('Argument to do_stuff(x) is not int')
如果它太难看或令人费解(比如遍历所有变量并比较类型和值以获得匹配的名称),那么我会放弃。
谢谢
P.S.: 我使用的是 Python 3.9,所以 f-string 语法是有效的。不确定我是否可以使用其他最新版本的魔法。
对象在 Python 中没有专用名称。事实上,它们可以被多个名称引用。在您的示例中,您可以做的最好的事情是报告函数的参数名称,因为它至少在函数范围内是唯一的。如果你不想打印对象的值,你可以只打印它的类型,看起来这才是你真正想要捕捉的:
def do_stuff(x):
if not isinstance(x, int):
raise TypeError(f'Argument x of dostuff(x) is a {type(x)}, should be a {int}')
pass
PS
__name__
属性用于存储 类 和函数的定义名称,但变量可能并不总是存在 (x = do_stuff; del do_stuff; print(x.__name__)
)。
我正在 Python 中编写一个函数来计算一些东西,如果我的函数的参数类型不正确,它就会失败。所以我想在发生这种情况时提出错误。
def do_stuff(x):
if not isinstance(x, int):
raise ValueError(f'Argument {x} is not int')
pass
但是,打印的是x
的内容,而不是x
的名字,这对调试很有用。在实际情况下,x
需要是 pandas.Series
但有时会应用于 pandas.DataFrame
。打印 DataFrame 的内容对于错误跟踪完全没有用。
我正在做更像这样的事情,并使用行号跟踪错误。但是有变量名会很棒
raise ValueError('Argument to do_stuff(x) is not int')
如果它太难看或令人费解(比如遍历所有变量并比较类型和值以获得匹配的名称),那么我会放弃。
谢谢
P.S.: 我使用的是 Python 3.9,所以 f-string 语法是有效的。不确定我是否可以使用其他最新版本的魔法。
对象在 Python 中没有专用名称。事实上,它们可以被多个名称引用。在您的示例中,您可以做的最好的事情是报告函数的参数名称,因为它至少在函数范围内是唯一的。如果你不想打印对象的值,你可以只打印它的类型,看起来这才是你真正想要捕捉的:
def do_stuff(x):
if not isinstance(x, int):
raise TypeError(f'Argument x of dostuff(x) is a {type(x)}, should be a {int}')
pass
PS
__name__
属性用于存储 类 和函数的定义名称,但变量可能并不总是存在 (x = do_stuff; del do_stuff; print(x.__name__)
)。