为什么只能使用 python 调试器分配某些变量?
Why can only certain variables be assigned using python debugger?
在调试我的代码时,我偶然发现了 pdb 的这种行为(请参阅下面的代码),您只能在其中分配某些类型的变量。为了澄清起见,我正在使用 pandas DataFrames 并想将其中一列的名称分配给一个新变量以供快速参考,并且这样做没有给出任何错误。但是当我想使用我的新变量时,根据我使用该变量的方式,我得到了不同的错误。这种行为从何而来,是否有意为之?
(Pdb) pos_frame.columns[-1]
'Position 13'
(Pdb) a = pos_frame.columns[-1]
(Pdb) b = pos_frame[a].values
*** The specified object '= pos_frame[a].values' is not a function or was not found along sys.path.
(Pdb) pos_frame[a]
*** NameError: name 'a' is not defined
(Pdb) a
(Pdb) x = 4
(Pdb) x
4
*编辑
一些娱乐代码
import numpy as np
import pandas as pd
import pdb
# creating a DataFrame
col_list = [
np.r_[0:50],
np.r_[50:100]
]
data_frame = pd.DataFrame(col_list).transpose()
data_frame.columns = [f"Position {i}" for i in range(1, len(col_list)+1)]
pdb.set_trace()
a = ...
和 b = ...
不被识别为 Python 语句,因为 a
是 args
命令和 b
的缩写是break
命令的缩写。
args
显然忽略了任何参数。
break
拒绝将 = pos_frame[a].values
作为函数或文件名,就像下面的错误消息状态一样。
pos_frame[a]
明确地是一个 Python (表达式)语句,但是由于您之前定义 a
的尝试失败,因此该语句的执行失败并显示 NameError
显示。
使用!
命令显式执行一个Python语句,当该语句可以被识别为调试器命令时。
(Pdb) ! a = pos_fram.columns[-1]
(Pdb) ! b = pos_frame[a].values
(一般情况下,使用 !
除非你 知道 没有必要。x
不是调试器命令,所以没有歧义x = 4
是调试器命令还是要执行的 Python 语句。)
在调试我的代码时,我偶然发现了 pdb 的这种行为(请参阅下面的代码),您只能在其中分配某些类型的变量。为了澄清起见,我正在使用 pandas DataFrames 并想将其中一列的名称分配给一个新变量以供快速参考,并且这样做没有给出任何错误。但是当我想使用我的新变量时,根据我使用该变量的方式,我得到了不同的错误。这种行为从何而来,是否有意为之?
(Pdb) pos_frame.columns[-1]
'Position 13'
(Pdb) a = pos_frame.columns[-1]
(Pdb) b = pos_frame[a].values
*** The specified object '= pos_frame[a].values' is not a function or was not found along sys.path.
(Pdb) pos_frame[a]
*** NameError: name 'a' is not defined
(Pdb) a
(Pdb) x = 4
(Pdb) x
4
*编辑 一些娱乐代码
import numpy as np
import pandas as pd
import pdb
# creating a DataFrame
col_list = [
np.r_[0:50],
np.r_[50:100]
]
data_frame = pd.DataFrame(col_list).transpose()
data_frame.columns = [f"Position {i}" for i in range(1, len(col_list)+1)]
pdb.set_trace()
a = ...
和 b = ...
不被识别为 Python 语句,因为 a
是 args
命令和 b
的缩写是break
命令的缩写。
args
显然忽略了任何参数。break
拒绝将= pos_frame[a].values
作为函数或文件名,就像下面的错误消息状态一样。pos_frame[a]
明确地是一个 Python (表达式)语句,但是由于您之前定义a
的尝试失败,因此该语句的执行失败并显示NameError
显示。
使用!
命令显式执行一个Python语句,当该语句可以被识别为调试器命令时。
(Pdb) ! a = pos_fram.columns[-1]
(Pdb) ! b = pos_frame[a].values
(一般情况下,使用 !
除非你 知道 没有必要。x
不是调试器命令,所以没有歧义x = 4
是调试器命令还是要执行的 Python 语句。)