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

如何定义接收两个正整数的Python函数,输入非法时抛出ValueError并提示

问题解答

现有代码问题梳理

  • 类型校验顺序错误:先执行了数值正负判断,再校验输入类型,如果输入为字符串,执行val1 < 0会直接触发类型错误,无法抛出你需要的ValueError
  • 抛出异常时没有携带'invalid'提示信息,不符合需求
  • 函数内部打印语句误用了外部变量int1、int2,没有使用形参val1、val2,代码耦合性高且容易报错
  • 函数调用逻辑没有放在try-except块内,函数内部抛出的异常不会被捕获,会直接中断程序输出错误栈

修正后完整代码

import math

def coprimeTestFunction(val1, val2):
    # 先校验类型,再校验数值范围
    if type(val1) != int or type(val2) != int:
        raise ValueError("invalid")
    if val1 < 0 or val2 < 0:
        raise ValueError("invalid")
        
    result = math.gcd(val1, val2)
    
    if result == 1:
        print(f'The values {val1} and {val2} are coprime')
    else:
        print(f'The values {val1} and {val2} are not coprime, they have a GCD of {result}')

try:
    int1 = int(input('Enter first integer: '))
    int2 = int(input('Enter second integer: '))
    # 函数调用移到try块内,捕获内部抛出的异常
    coprimeTestFunction(int1, int2)
except ValueError as e:
    # 所有异常场景统一输出invalid
    print("invalid")

核心改动说明

  • 调整校验顺序:先判断输入类型是否为int,再判断是否为正整数,避免字符串输入触发类型异常
  • 抛出ValueError时直接携带'invalid'信息,符合需求要求
  • 函数内打印语句替换为形参,消除对外部变量的依赖
  • 将函数调用移入try块,统一捕获输入阶段和函数校验阶段的所有ValueError,统一输出'invalid'提示
  • 简化了互质判断的分支逻辑,删除冗余的else分支,math.gcd返回值一定为正整数,不会出现未覆盖的情况

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 17:57:00