Python2.7/3.7环境下cgi.escape属性缺失报错的技术求助
解决
AttributeError: module 'cgi' has no attribute 'escape' 问题 这个错误的核心原因是 cgi.escape 函数的版本兼容性问题:
- 在Python 3.2版本,
cgi.escape就被官方标记为弃用,推荐改用html.escape - 在Python 3.8版本,
cgi.escape被完全从cgi模块中移除 - 虽然理论上Python 2.7和3.7还保留这个函数,但如果你的环境出现报错,大概率是
cgi模块被意外修改,或者存在同名文件干扰了模块导入
快速修复方案(推荐)
直接把代码里的cgi.escape替换成html.escape,修改步骤如下:
- 导入
html模块(如果还没导入的话) - 替换调用语句
原来的代码:
import cgi # ... filewrite.write(cgi.escape("PARAM: " + line + "\n"))
修改后的代码:
import html # ... filewrite.write(html.escape("PARAM: " + line + "\n"))
兼容Python2和Python3的写法
如果你的脚本需要同时在两个版本的Python中运行,可以用条件导入的方式,确保在不同版本下都能拿到正确的转义函数:
# 先尝试导入Python3的html.escape,失败则用Python2的cgi.escape try: from html import escape as html_escape except ImportError: from cgi import escape as html_escape # 后续调用统一用html_escape filewrite.write(html_escape("PARAM: " + line + "\n"))
补充说明
从你的错误回溯来看,报错发生在/usr/share/set/src/webattack/harvester/harvester.py的第334行,这个脚本是SET(Social-Engineer Toolkit)里的组件。如果不想修改源码,也可以考虑降级Python版本到3.7及以下,但显然改用html.escape是更长远的解决方案。
内容的提问来源于stack exchange,提问作者ayush4976
相关产品推荐
相关产品推荐

