You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 10:15:26