API返回字符串转整数后调用bby函数返回None问题求助
问题排查与修复方案
核心问题分析
bby()函数无返回值:自定义的bby函数计算出adYear后未用return返回结果,调用时默认返回None,这是所有角色出生年份显示None的直接原因。- 异常处理逻辑漏洞:若
birth_year无法转换为数字(比如SWAPI中部分角色的birth_year是unknown),try块抛出异常后charBirthMod未定义,后续执行charBirthAD = bby(charBirthMod)会引发错误;且异常块中设置的charBirthAD = ''会被后续代码覆盖。 - 字符串处理不严谨:
strip('BBY')仅能去除两端的指定字符,无法处理带空格或点的格式(如'49 BBY'),会导致转换失败。
修复后的代码
1. 修正bby()函数
添加return语句返回计算结果:
def bby(birthyear): # 0 B.B.Y. 对应 AD 1815 adYear = 1815 - birthyear return adYear
2. 修正主函数逻辑
完善异常处理,优化字符串处理:
from function import * import requests def main(): url = "https://swapi.dev/api/people" resObj = requests.get(url) print("STATUS CODE: ", resObj.status_code) typewriter("Processed API URL call. Returning JSON object.", 0.01) resDict = resObj.json() characters = resDict['results'] for character in characters: charBirth = character['birth_year'] # 兼容多种格式的birth_year,去除BBY、点号和多余空格 charBirthStrip = charBirth.replace('BBY', '').replace('.', '').strip() try: charBirthMod = int(float(charBirthStrip)) charBirthAD = bby(charBirthMod) except ValueError: # 处理无法转换的情况,比如'unknown' charBirthAD = '未知' print("Name:", character['name']) print("Height:", character['height'], "cm") print("Mass:", character['mass'], "kg") print("Birth year:", charBirthAD, "AD") print("Gender:", character['gender']) print("---") main()
修复说明
- 函数返回值:给
bby()添加return adYear,确保计算结果能被正确传递。 - 异常处理:精准捕获
ValueError,在异常块内直接设置charBirthAD为'未知',避免变量未定义或值被覆盖的问题。 - 字符串处理:用
replace统一去除BBY和点号,再用strip清理空格,兼容SWAPI中不同格式的birth_year值。
内容的提问来源于stack exchange,提问作者rickyRickyRicky
相关产品推荐
相关产品推荐

