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

Python实现Transit Time公式报错:TypeError问题排查与代码修正

问题分析与代码修正

错误原因

  1. 库名拼写错误:代码里写了sci.pi,但你引入的是math库,应该改为math.pi。
  2. 语法错误:公式中))))(1-(math.cos(...)的位置,两个右括号后直接跟括号,相当于把前面计算出的浮点数当成函数调用,导致TypeError——这里缺少了除法运算符/,因为凌星时间公式中这部分是分子除以分母。
  3. 公式逻辑错误:凌星时间的核心公式里,应该是1 + (raio_planeta/raio_estrela),你写成了1 -,这会导致计算结果不合理(甚至出现根号内负数的情况)。

修正后的代码

import math

def tempo_transito(periodo, raio_estrela, semieixo, raio_planeta, inclinacao):
    # 先转换倾角为弧度
    inclinacao_rad = math.radians(inclinacao)
    cos_inclinacao = math.cos(inclinacao_rad)
    
    # 拆分公式各部分,避免括号混乱
    term1 = 1 + (raio_planeta / raio_estrela)
    term1_sq = term1 ** 2
    
    term2 = semieixo / (raio_estrela * cos_inclinacao)
    term2_sq = term2 ** 2
    
    numerator = term1_sq - term2_sq
    denominator = 1 - cos_inclinacao ** 2
    
    # 确保根号内非负,避免math.asin报错
    if numerator <= 0 or denominator <= 0:
        raise ValueError("参数组合不符合凌星条件,无法计算凌星时间")
    
    sqrt_part = math.sqrt(numerator / denominator)
    asin_arg = (raio_estrela / semieixo) * sqrt_part
    
    # 确保arcsin的参数在[-1,1]范围内
    if asin_arg < -1 or asin_arg > 1:
        raise ValueError("arcsin参数超出范围,无法计算凌星时间")
    
    tempo = (periodo / math.pi) * math.asin(asin_arg)
    return tempo

额外说明

拆分了长表达式,避免因括号嵌套过多导致的语法错误,同时提升代码可读性;添加了参数合法性检查,避免因输入参数不符合凌星条件(比如倾角过大、半长轴过小等)导致math.asin报错。

内容的提问来源于stack exchange,提问作者Matheus

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 01:20:33