if key in row[0]: # 检查kvSum的键是否作为子字符串存在于单元格的值中 TypeError: argument of type 'NoneType' is not iterable
时间: 2024-10-20 08:10:24 浏览: 16
这个错误提示 `TypeError: argument of type 'NoneType' is not iterable` 出现是因为在 Python 中,当你尝试对 `NoneType` 对象执行迭代操作,如检查它是否包含某个键 (`key`),会抛出这样的异常。`row[0]` 可能返回的是 None 而不是列表、字典或其他可迭代的数据结构。
`if key in row[0]:` 这行代码原本应该是期望 `row[0]` 是一个可以遍历查找元素的数据结构(例如列表或字典),但实际获取到的是 None 值,所以引发了 TypeError。
解决这个问题通常需要在检查之前先确认 `row[0]` 是否已经被赋值并且不是一个 None 类型:
```python
if row[0] is not None and key in row[0]:
# 现在我们知道row[0]是一个可迭代的对象
```
如果 `row[0]` 是预期应该存在的数据,那么你需要检查程序流程,看是否有可能在访问它之前就得到了 None。如果在获取数据之后仍然可能是 None,那么可以在访问前添加适当的错误处理逻辑。
相关问题
if isinstance(self.pretrained, str): self.apply(_init_weights) logger = get_root_logger() logger.info(f'load model from: {self.pretrained}') checkpoint = torch.load(self.pretrained, map_location='cpu') state_dict = checkpoint['model'] state_dict['patch_embed.proj.weight'] = state_dict['patch_embed.proj.weight'].unsqueeze(2).repeat(1,1,self.patch_size[0],1,1) / self.patch_size[0] ## Duplicate weights for temporal attention and temporal norm # new_state_dict = state_dict.copy() # for key in state_dict: # if 'blocks' in key and 'attn' in key and 'relative' not in key and 'mask' not in key: # new_key = key.replace('attn','temporal_attn') # if not new_key in state_dict: # new_state_dict[new_key] = state_dict[key] # else: # new_state_dict[new_key] = state_dict[new_key] # if 'blocks' in key and 'norm1' in key and 'relative' not in key and 'mask' not in key: # new_key = key.replace('norm1','temporal_norm') # if not new_key in state_dict: # new_state_dict[new_key] = state_dict[key] # else: # new_state_dict[new_key] = state_dict[new_key] # state_dict = new_state_dict msg = self.load_state_dict(state_dict, strict=False) logger.info('Missing keys: {}'.format(msg.missing_keys)) logger.info('Unexpected keys: {}'.format(msg.unexpected_keys)) logger.info(f"=> loaded successfully '{self.pretrained}'") del checkpoint torch.cuda.empty_cache() elif self.pretrained is None: self.apply(_init_weights) else: raise TypeError('pretrained must be a str or None')
这段代码主要是加载预训练模型的过程。如果传入的预训练模型是一个字符串,那么就会根据该字符串的路径加载模型。加载过程中会将模型的权重进行初始化,并将预训练模型的权重加载到新的模型中。如果预训练模型是 None,则会进行默认初始化。如果传入的预训练模型不是 str 或 None,则会抛出一个 TypeError。
if 'S6.4.1' in row[0].value: TypeError: argument of type 'int' is not iterable
抱歉,这是我的失误。在上面的代码中,`row[0].value`是一个字符串,因此应该使用`in`来判断字符串是否包含目标子串。在修改后的代码中,我们应该使用`str(row[0].value)`将该单元格的值转换为字符串,然后再对其进行判断。
以下是修改后的代码:
```python
from openpyxl import load_workbook
# 打开Excel文件
wb = load_workbook(filename='C_Geely_Lotus DMS 20230606.xlsx')
# 选择Release Matrix-Lambda表格
ws = wb['Release Matrix-Lambda']
# 遍历每一行
for row in ws.iter_rows(min_row=2):
# 判断第一列是否包含目标字符串
if 'S6.4.1' in str(row[0].value):
# 输出对应的行数
print(row[0].row)
```
这样就可以正常运行了。
阅读全文