File "gen_allmem. py" , line 79, in <module› gen_lwmem (SHEET_NAME, TAG_NAME, MEM_EXCEL, RTL_DIR, MEM_PATH, MEM_LIB) -/niatproi8/zx2aa580/digital/lizhuoxin/scripts/dev_mem_pub/code/V3.0.0/scripts/gen_mem_lib.py", line 12344, in gen_lwmem gen_wrapper_tsmc5_tsmc28_tsmc12 (type_ram, model_ name _gen, ram_target_ port, port_map_final, port_map_tmp, ports,wrapper_file, RAM_TP_R, File "/njatproj8/zx2a580/digital/lizhuoxin/scripts/dev_mem_pub/code/V3.0.0/scripts/gen_mem_lib.py", line 5723, in gen _wrapper_tsm c5_tsmc28 tsmc12 depth = re. search(r"TST (4|4P|5|5P) (L|U|S|E) (HDSPRF|UHDSPRF |HSSPRF|UHSSPRF|HSSPSR | UHSSPSR HDSPSBSR| UHDSPSBSR | HSSPSBSR | UHSSPSBSR | H DSPMBSR | UHDSPMBS|HSSPMBS| UHSSPMBSR|HD2PRF |UHD2PRF|HSPRF |UHSPRF |HD2PSBSR|UHD2PSBSR| HD2PMBSR | UHD2PMBSR| HDDPSBSR |UHDDPSBSR |HDDPMBSR |UHDDPMBSR) (?P<depth>\d+)X(?P<width>\d+)\w+" ,model name). group ('depth* ) AttributeError: 'NoneType object has no attribute 'group' /njatproj8/zx2aa580/digital/lizhuoxin/scripts/dev
时间: 2025-05-25 22:01:38 浏览: 27
从错误信息来看,`File "gen_allmem.py"` 的第79行调用了 `gen_lwmem()` 函数,在这个函数内部又调用了其他函数如 `gen_wrapper_tsmc5_tsmc28_tsmc12()`。最终在正则表达式匹配过程中发生了异常,具体是因为 `re.search()` 返回了 `None` 对象,并试图对它调用 `.group('depth')` 方法。
### 错误分析
1. **正则表达式未匹配到目标内容**
正则表达式的模式未能成功匹配字符串变量 `model_name` 中的内容,导致返回值为 `None`。
2. **尝试访问 NoneType 属性**
当程序继续执行 `group('depth')` 时抛出了 `AttributeError` 异常,因为 `NoneType` 没有该属性或方法。
---
### 解决方案
#### 方案一:检查输入数据是否正确
确保传递给函数的参数(尤其是 `model_name_gen` 或者类似的数据源)包含预期格式的信息。如果不确定模型名的具体形式,可以打印调试日志:
```python
print(f"Model Name: {model_name}")
```
确认其结构与正则表达式的假设一致。
#### 方案二:增加空结果保护机制
修改代码以验证 `search()` 是否返回有效对象后再操作:
```python
match_result = re.search(pattern, model_name)
if match_result is not None:
depth = match_result.group("depth")
else:
print(f"No valid pattern found for the given model name '{model_name}'. Please check input.")
# 可选择设置默认值或者其他处理策略
depth = "default_depth_value"
```
通过这种方式避免直接对无效对象进行方法调用。
#### 方案三:优化正则表达式规则
如果当前使用的正则表达过于复杂或者存在潜在问题,则需要重新审视它的设计思路并简化之。例如明确所需提取字段的位置、大小限制等约束条件。
---
### 具体实例修正步骤
以下是针对上述提到部分区域的一个改进建议版本:
```python
import re
def extract_depth(model_name):
regex_pattern = r"(TST (?:4|4P|5|5P)(?:L|U|S|E)[\s\S]+?(?P<depth>\d+)X(?P<width>\d+))"
if isinstance(model_name,str):
result=re.match(regex_pattern,model_name)
try :
return int(result['depth'])#转换成整数型更方便后续计算使用
except TypeError as err :
logging.error(f"Incorrect format detected:{err}. Model_Name={repr(model_name)} ")
return -1 #标记未知深度情况下的特殊情况处理标志
else : raise ValueError ("Invalid argument type provided.Expecting string.")
```
这里不仅增加了对于非法输入类型的判断也加入了基本的日志记录功能以便追踪实际运行期间遇到的各种意外状况。
阅读全文
相关推荐















