的不堪不透明爲什麼IDE中的pylint的和智能感知功能具有難以識別的time.struct_time
實例?下面的代碼包含了對類的現有/不存在屬性的一些簡單測試,名爲元組和名稱元組,如time.struct_time
。一切正常的pylint的,和的IntelliJ VSCode - 在每種情況下,除了time.struct_time
報告給缺少的屬性的訪問 - 它產生任何這些工具沒有警告或錯誤。他們爲什麼不能說出它是什麼以及它的屬性是什麼?time.struct_time結構
import time
from collections import namedtuple
t = time.localtime()
e = t.tm_mday
e = t.bad # this is not reported by linters or IDEs.
class Clz:
cvar = 'whee'
def __init__(self):
self.ivar = 'whaa'
o = Clz()
e = Clz.cvar
e = o.ivar
e = Clz.bad
e = o.bad
Ntup = namedtuple('Ntup', 'thing')
n = Ntup(thing=3)
e = n.thing
e = n.bad
這個問題的背景是pipenv
以下最新的錯誤 -
# Halloween easter-egg.
if ((now.tm_mon == 10) and (now.tm_day == 30))
顯然,通路徑從來沒有進行測試,但它似乎是典型的靜態分析工具就不會到這裏任何幫助。這對於標準庫中的類型來說很奇怪。
(修復可全額在https://github.com/kennethreitz/pipenv/commit/033b969d094ba2d80f8ae217c8c604bc40160b03可以看出)
可能是因爲'time.struct_time'是C,所以他們不能檢查其有效屬性源。 – user2357112
當然,它可能與它有關,但我認爲它不夠。這些工具不會被每個C實現類型所困惑。他們完全滿意於列表等。 – pvg
他們需要對'time.struct_time'不適用的列表進行特定的處理。 – user2357112