python - 当我稍后设置变量值时,如何避免来自 Pylint 的“不可下标”类型检查?
问题描述
我有一些 python 代码正在尝试输入提示 PEP484 样式,并收到虚假警告。
通过一个循环,我首先将 a 初始化last_row
为 None。在第一次通过时,我给它一个值,然后下次我用它做一些事情。但是,None
即使我将类型声明为Dict
如何最好地避免这种情况?
我想在初始化之外设置一些值只是None
为了关闭 linter,但这似乎是一个 hack。
last_row: Dict = {}
也许 linter 指向代码异味,我应该解决这个问题,以便为last_row
...提供更一致的类型/值
last_row: Dict = None
for index, row in self.df.iterrows():
if last_row is not None:
row['intent_from'] = str(last_row['intent'])
last_row = row
在上面的代码中,我收到此错误:
Value 'last_row' is unsubscriptable
我相信打字稿检查器对这类事情更聪明,但它会在运行时猜测,所以感觉也有点脆弱。
解决方案
一种选择是将类型提示定义为 Dict 和 None 的并集,但是,这会产生不同的问题。它不能保证它是可下标的。
问题是它None
不是字典类型,所以last_row: Dict = None
是不正确的。
对此的解决方案可能是将字典初始化为空字典,然后在访问它之前检查该键是否存在。
last_row: Dict = {}
for index, row in self.df.iterrows():
if 'intent' in last_row:
row['intent_from'] = str(last_row['intent'])
last_row = row
推荐阅读
- javascript - 自定义文件输入按钮不会选择文件
- android - 传递给第二个 Activity 的 ArrayList 数据未在 TableLayout 中显示
- python - 如何在 Python 3 的 exec 命令中停止执行?
- python - 如何在tensorflow中实现Region of Interest Pooling层?
- assembly - 汇编符号:sub -0x1(%bx,%di),%al
- powershell - 使用 .csv 中的文件夹名称进行复制
- angularjs - 过滤器在 AngularJs 中不起作用
- curl - 在 AIX 面临的问题上从源代码构建 Curl
- python - Python,从区间中删除子区间
- python-3.x - cx_Freeze 转换的 exe:窗口立即关闭