Jupyter中调用OpenWeather API的print语句格式化报错问题
问题诊断
和Jupyter Notebook环境兼容性无关,报错完全由代码语法错误、调用逻辑错误导致,你定位到print段是对的,除此之外还有两处隐藏的逻辑错误:
- print段的f-string存在4个语法问题:
- 外层用单引号包裹f-string时,内部又用单引号包裹
'temp_max',Python解析时会提前判定字符串结束,直接触发语法错误 - 末尾没有用对应的单引号闭合字符串,反而误写了反引号,不符合Python字符串语法规则
- 最高温位置你写的是字符串字面量
'temp_max',没有引用存储最高温数值的变量temperature_max,就算语法能跑也输出不了正确数值 - 变量和前后拼接的文本之间没有加空格,输出内容会出现文字粘连
- 外层用单引号包裹f-string时,内部又用单引号包裹
- requests请求写法顺序错误:
requests.get().json(url)的写法完全不符合库的调用规则,get()方法需要接收url作为入参,json()是请求返回响应对象的内置方法,不需要传入参数,原写法根本发不出正确请求 - API参数错误:按城市名查询时OpenWeather接口的参数名是
q,不是id,id参数需要传入官方分配的城市数字ID,直接传城市名会返回404错误
修正后可运行代码
import requests api_key = "替换为你自己的OpenWeather API密钥" city = input("Hello, please insert city here!") url = f'https://api.openweathermap.org/data/2.5/weather?q={city}&appid={api_key}&units=metric' # 修正请求调用顺序 data = requests.get(url).json() temperature = data['main']['temp'] temperature_min = data['main']['temp_min'] temperature_max = data['main']['temp_max'] # 修正f-string语法、变量引用、闭合问题,补全文本空格 print(f'In the city of {city} the temperature is {temperature}. The minimum temperature is {temperature_min}, the maximum is {temperature_max}')
关键注意事项
- 写f-string时如果外层用单引号,内部需要加引号的场景要换成双引号,避免引号冲突;引用变量时直接写变量名即可,不要给变量名加引号
- Python中字符串需要用同类型的单/双引号成对闭合,反引号不能作为字符串边界标记
- 调用第三方库前先确认方法的参数要求和调用顺序,不要随意调换传参位置
内容的提问来源于stack exchange,提问作者besch150
相关产品推荐
相关产品推荐

