Python无法导入dns.resolver模块求助:Ubuntu16.04下DNS查询脚本报错
解决Python DNS查询脚本的ImportError问题
看起来你在写DNS查询脚本时踩了两个常见的坑,咱们来逐个解决:
1. 脚本文件名与第三方库重名,导致循环导入
你的脚本命名为dns.py,这刚好和你要导入的dns库同名了!Python在导入模块时,会先在当前工作目录查找对应的文件,所以当你执行import dns.resolver时,它会把你自己的dns.py当作模块导入,进而陷入循环导入的死胡同,直接抛出ImportError。
解决办法:
- 立刻把你的脚本重命名成别的名字,比如
dns_lookup.py或者domain_query.py,避开和库名重复的坑。
2. 可能未安装dnspython库
就算解决了文件名的问题,如果你还没安装dns.resolver所属的dnspython库,还是会报错。在Ubuntu 16.04 + Python3.5的环境下,你可以用下面两种方式安装:
# 用apt包管理器安装 sudo apt-get install python3-dnspython # 或者用pip3安装(如果你的pip3指向Python3.5) pip3 install dnspython
修正后的脚本示例
这里给你调整了脚本,加上了异常处理让它更健壮,同时规范了记录类型的写法:
#!/usr/bin/python3 import dns.resolver try: # 记录类型建议用大写'A',符合DNS规范 query_result = dns.resolver.query('padaru.de', 'A') print(f"域名padaru.de的A记录如下:") for record in query_result: print(f"- {record.address}") except dns.resolver.NXDOMAIN: print("错误:该域名不存在") except dns.resolver.NoAnswer: print("错误:该域名没有配置A记录") except Exception as e: print(f"查询出错:{str(e)}")
内容的提问来源于stack exchange,提问作者NETFLOX
相关产品推荐
相关产品推荐

