已安装并导入requests库调用时仍报NameError未定义如何解决
解决方案
- 检查单元格运行顺序:Jupyter的执行顺序以你点击运行的先后为准,而非单元格从上到下的排列顺序。对比导入语句所在单元格和业务代码所在单元格左侧
In[]中的数字,若导入单元格的数字更大,说明你先运行了业务代码、后运行的导入语句。你可以重启内核后,先执行导入语句所在单元格,确认无报错后再执行业务代码单元格。 - 检查当前内核是否匹配安装requests的环境:很多时候本地存在多个Python虚拟环境,你安装requests的环境和Jupyter当前运行的内核不是同一个。可以单独新建一个单元格,运行
import requests;print(requests.__version__),如果执行报错,就说明当前内核没有安装requests,切换到对应安装了requests的虚拟环境内核即可。 - 检查是否存在命名冲突:如果你之前定义过名为
requests的变量、函数或者同名的.py文件,会覆盖掉导入的requests库。你可以在导入语句后运行print(type(requests)),如果输出不是<class 'module'>,就说明出现了命名覆盖,删掉重名的变量/文件,重启内核即可。 - 临时规避方案:可以直接在业务代码所在单元格的第一行补充需要的导入语句,避免作用域异常问题,修改后的业务代码如下:
import requests from io import BytesIO from scipy.io import wavfile def loadSound(url): R = requests.get(url) rate, data = wavfile.read(BytesIO(R.content)) data = data * 1.0 / (abs(data).max()) if len(data.shape) > 1: # 针对立体声数据,仅使用第一个声道 data = data[:,0] return data, rate # wav文件的URL地址 urls = ["http://cd.textfiles.com/sbsw/INSTRMNT/TENORSA.WAV", "https://static.wixstatic.com/mp3/61e4ba_e696e98e0c5a466bb1537bdc3e0fc3b3.wav"] sounds = [] for url in urls: sound, rate = loadSound(url) sounds.append((sound, rate))
内容的提问来源于stack exchange,提问作者Ingeneravit
相关产品推荐
相关产品推荐

