【问题标题】:PyCharm thinks variable is not used but clearly is inside class method?PyCharm 认为变量未使用但显然在类方法中?
【发布时间】:2019-12-13 09:44:03
【问题描述】:

出于某种原因,PyCharm 告诉我,我的 5 个列表中有 3 个没有在我的函数中使用,但它们实际上正在函数中使用,并且代码以预期的结果完成。

这是奇怪的行为。这是一个错误吗?

我看到f-strings 报告误报的一些问题,但我认为这不是同一个问题。

   def filter_for_vzb_vzt(self, query_results):
        vzb_list = []
        vzt_list = []
        vzt_analyst_tkr = []
        vzb_analyst_tkr = []
        vzb_lpc_analyst_tkr = []

        with open('./Files/{}.json'.format('VZT_ACNA_LIST'), 'r') as df:
            vzt_analyst_tkr = json.load(df)

        with open('./Files/{}.json'.format('VZB_TAX_ACNA_LIST'), 'r') as df:
            vzb_analyst_tkr = json.load(df)

        with open('./Files/{}.json'.format('VZB_LPC_ACNA_LIST'), 'r') as df:
            vzb_lpc_analyst_tkr = json.load(df)

        self.process_vzb_mass(vzb_list, vzb_analyst_tkr, vzb_lpc_analyst_tkr)
        self.process_vzt_mass(vzt_list, vzt_analyst_tkr)
        self.active_time = False

【问题讨论】:

  • 如果将vzt_analyst_tkr = json.load(df) 替换为vzt_analyst_tkr.append(0) 会发生什么?我的猜测是你在重新分配它之前从不使用它,所以 PyCharm 认为它是未使用的。你最好不要在顶部声明它,因为with 语句不会在 Python 中创建自己的范围。
  • @MichaelKolber 这是有道理的。这可能是通知的原因。很高兴知道 with 语句也不会创建自己的范围。泰。很难打破总是在函数顶部声明所有变量的习惯。但我更不喜欢烦人的通知,所以我将删除 with 之前的那 3 行。
  • 没问题。作为一般规则,Python 没有block-level scope
  • 我个人说明,这三个变量不需要创建为lists,对吗?
  • @Trenton_M 不,他们没有,但为了便于阅读,它可以帮助读者了解这些变量是列表,而无需查看 with open 语句正在生成什么。

标签: python methods pycharm false-positive


【解决方案1】:

您确实没有使用这些值。仔细阅读消息:

局部变量<...>未使用

PyCharm 非常具体 - 您正在为这三个变量分配一个新列表

<...> = json...

这些变量指向的原始空列表随后被丢弃。

这些赋值不是有条件的,所以你永远不会使用那些空列表——PyCharm 警告你你没有使用空列表,而不是变量本身。您可能应该只删除这些行 - 通常的做法是首先使用实际使用的值定义变量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-22
    • 1970-01-01
    • 2019-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-12
    • 2015-04-28
    相关资源
    最近更新 更多