遇TypeError:无法将SSLCertVerificationError与字符串拼接,求解决
问题解决:TypeError 及代码其他问题修复
核心错误原因
你遇到的TypeError是因为在URLError的异常处理中,e.reason可能是一个异常对象(比如SSLCertVerificationError),而非字符串,直接和字符串拼接会触发类型错误。另外HTTPError分支里的e.code是整数,直接与字符串拼接也会出现同样问题。
修复后的代码
import urllib.request import urllib.error def myfunction(md5): # 修正函数名拼写错误 reponse = None # 提前初始化变量,避免后续访问报错 try: user_agent = "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0" headers = {"User-Agent": user_agent} # 改用HTTPS,避免谷歌强制跳转导致的SSL问题 url = "https://www.google.fr/search?hl=fr&q=" + md5 requete = urllib.request.Request(url, None, headers) reponse = urllib.request.urlopen(requete) # 将判断逻辑移到try块内,确保reponse已成功赋值 content = reponse.read().decode('utf-8') # 解码为字符串再判断 if "no document" in content: print("[-] HASH NOT FOUND VIA GOOGLE") except urllib.error.HTTPError as e: # 将整数转为字符串后拼接,或用f-string print(f"ERROR HTTP: {e.code}") except urllib.error.URLError as e: # 将reason转为字符串,处理可能的异常对象 print(f"ERROR of URL : {str(e.reason)}") finally: # 确保响应对象关闭 if reponse: reponse.close()
关键修复点
- 类型拼接错误:使用f-string或
str()将非字符串类型(如整数、异常对象)转为字符串后再输出,避免类型错误。 - 变量未初始化:提前初始化
reponse变量,避免异常分支外访问未定义的变量。 - 逻辑位置错误:将
reponse.read()的判断逻辑移到try块内,只有请求成功时才执行该判断。 - 协议问题:将URL从
http改为https,避免谷歌强制跳转引发的SSL验证问题。 - 函数名拼写:修正
myfuntion为myfunction,避免调用时出错。 - 资源释放:添加
finally块关闭响应对象,避免资源泄漏。
内容的提问来源于stack exchange,提问作者gougou
相关产品推荐
相关产品推荐

