为了账号安全,请及时绑定邮箱和手机立即绑定

Python - 尝试/除了 sum 函数

Python - 尝试/除了 sum 函数

呼啦一阵风 2021-09-02 16:36:54
我是 python 新手,我正在练习,所以我正在做一个 sum 函数,现在我想在输入不是我尝试过的数字的东西时显示一条消息错误try/excpet,它有点工作,但有时它没有,这是我的代码现在有:def sum(num_1, num_2):    sum_total = num_1 + num_2    print('The answer is:',sum_total)    return sum_totaldef app_sum():    try:        inp_1 = int(input('Number 1?: '))    except ValueError:        print('Invalid input, try again')        app_sum()    try:        inp_2 = int(input('Number 2?: '))    except ValueError:        print('Invalid input, try again')        app_sum()    sum(inp_1,inp_2)app_sum()这是我的输出:Number 1?: 1Number 2?: 2The answer is: 3Number 1?: AInvalid input, try againNumber 1?: 1Number 2?: AInvalid input, try againNumber 1?: 1Number 2?: 1The answer is: 2Traceback (most recent call last):  File "suma.py", line 9, in app_sum    inp_1 = int(input('Number 1?: '))ValueError: invalid literal for int() with base 10: 'A'During handling of the above exception, another exception occurred:Traceback (most recent call last):  File "suma.py", line 24, in <module>    app_sum()  File "suma.py", line 12, in app_sum    app_sum()  File "suma.py", line 20, in app_sum    sum(inp_1,inp_2)UnboundLocalError: local variable 'inp_2' referenced before assignment
查看完整描述

2 回答

?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

您收到此错误的原因是因为有一种情况,您将其拖到程序末尾,


sum(inp_1,inp_2)

没有实际定义 inp_1 或 inp_2。这是因为当您点击“除外”时,您又在运行该程序。这不会“杀死”失败的程序,它只是启动它的另一个实例。当该实例完成时,第一个实例也想结束,但正如我们之前提到的,它缺少一个变量,因此会引发错误。见堆栈;


考虑一下食堂里盘子叠在一起的例子。位于顶部的板是第一个被移除的板,即已放置在最底部位置的板在堆叠中保留的时间最长......


虽然最后一个“盘子”留在堆栈中的时间最长,但它仍然需要脱落。在我们的例子中,“最后一个盘子”是 app_sum() 的实例,它有错误的输入。当它离开堆栈时,它会为您提供您在帖子中包含的错误。


试试这个:


def sum(num_1, num_2):

    sum_total = num_1 + num_2

    print('The answer is:',sum_total)

    return sum_total


def app_sum():

    while True:

        try:

            inp_1 = int(input('Number 1?: '))

            inp_2 = int(input('Number 2?: '))

            break

        except ValueError:

            print('Invalid input, try again')

    sum(inp_1, inp_2)

app_sum()

输出如下所示:


root@alarmux:/home/abdmin/python# ./test.py

Number 1?: 1

Number 2?: 2

The answer is: 3

root@alarmux:/home/abdmin/python# ./test.py

Number 1?: a

Invalid input, try again

Number 1?: 2

Number 2?: 3

The answer is: 5


查看完整回答
反对 回复 2021-09-02
?
慕村9548890

TA贡献1884条经验 获得超4个赞

您可以重复直到给出有效答案,而不是递归:


def sum(num_1, num_2):

    sum_total = num_1 + num_2

    print('The answer is:',sum_total)

    return sum_total


def app_sum():

    inp_1 = None

    while inp_1 is None:

        try:

            inp_1 = int(input('Number 1?: '))

        except ValueError:

            print('Invalid input, try again')

    inp_2 = None

    while inp_2 is None:

        try:

            inp_2 = int(input('Number 2?: '))

        except ValueError:

            print('Invalid input, try again')


    sum(inp_1,inp_2)


app_sum()

示例输出:


Number 1?: fjksdfsdflkj

Invalid input, try again

Number 1?: 3

Number 2?: fds

Invalid input, try again

Number 2?: 4

The answer is: 7


查看完整回答
反对 回复 2021-09-02
  • 2 回答
  • 0 关注
  • 227 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信