为什么只能使用 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 语句,因为 aargs 命令和 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 语句。)