Python中assert函数触发AssertionError的原因咨询
你在使用Python的assert测试parse和parse_cookie函数时触发AssertionError,核心原因是这两个函数完全没实现解析逻辑,只是固定返回空字典,但断言语句期望它们能正确解析出URL参数或Cookie的键值对。
你的代码如下:
def parse(query: str) -> dict: return {} if __name__ == '__main__': assert parse('https://example.com/path/to/page?name=ferret&color=purple') == {'name': 'ferret', 'color': 'purple'} assert parse('https://example.com/path/to/page?name=ferret&color=purple&') == {'name': 'ferret', 'color': 'purple'} assert parse('http://example.com/') == {} assert parse('http://example.com/?') == {} assert parse('http://example.com/?name=John') == {'name': 'John'} def parse_cookie(query: str) -> dict: return {} if __name__ == '__main__': assert parse_cookie('name=John;') == {'name': 'John'} assert parse_cookie('') == {} assert parse_cookie('name=John;age=28;') == {'name': 'John', 'age': '28'} assert parse_cookie('name=John=User;age=28;') == {'name': 'John=User', 'age': '28'}
具体错误点
- parse函数问题:
- 没有提取URL中
?之后的查询字符串部分 - 没有将查询字符串按
&分割为独立的键值对 - 没有处理键值对的
=拆分逻辑,也没忽略末尾无效的&符号
- 没有提取URL中
- parse_cookie函数问题:
- 没有将Cookie字符串按
;分割为独立项 - 没有处理每个Cookie项的
=拆分(包括值中包含=的特殊情况) - 没有过滤掉分割后产生的空字符串(比如末尾的
;)
- 没有将Cookie字符串按
简单修复思路
修复parse函数
def parse(query: str) -> dict: result = {} # 提取?后面的查询部分 query_part = query.split('?')[-1] if not query_part: return result # 按&分割键值对 pairs = query_part.split('&') for pair in pairs: if not pair: continue # 只分割第一个=,处理值中包含=的情况 key, *value_parts = pair.split('=') value = '='.join(value_parts) result[key] = value return result
修复parse_cookie函数
def parse_cookie(query: str) -> dict: result = {} if not query: return result # 按;分割,过滤空项 cookie_items = [item.strip() for item in query.split(';') if item.strip()] for item in cookie_items: # 只分割第一个= key, *value_parts = item.split('=') value = '='.join(value_parts) result[key.strip()] = value.strip() return result
内容的提问来源于stack exchange,提问作者1curafu
相关产品推荐
相关产品推荐

