尝试/例外错误处理无法识别ValueError

时间:2020-05-19 12:12:34

标签: python

在以下脚本中:

# shows multiplication table of a number upto that number
import time
while True:
    num = input("Enter number: ")
    try:
        def mult():
            for i in range(1, int(num)+1):
                print(str(i) + " x " + num + " = " + str(i * int(num)))
    except ValueError:
        print("Please enter a number")
        continue

    mult()
    time.sleep(2)

如果num的输入不是整数值,我希望显示“请输入数字” ,因为{{1} }放在ValueError中。

但是,try / except块似乎不起作用,因为在输入非数字字符串时,它会显示Python的Traceback错误:

int(num)

为什么错误处理不起作用?

2 个答案:

答案 0 :(得分:0)

您可以只删除mult()函数定义,因为它似乎并不特别重要(如果需要的话,请纠正我)。

您的代码将如下所示:

import time
while True:
    num = input("Enter number: ")
    try:
        for i in range(1, int(num)+1):
            print(str(i) + " x " + num + " = " + str(i * int(num)))
    except ValueError:
        print("Please enter a number")
        continue
    time.sleep(2)

这最初不起作用的原因是因为您的try语句是围绕定义包装的,而不是围绕mult()函数的实际调用的包装。这意味着当它运行时,它会尝试定义一个名为mult的函数,并且可以正常工作。但是,当它实际上在第13行调用该函数时,由于没有try语句,导致它中断。

答案 1 :(得分:0)

为什么要在尝试中定义多重?

try将try放入函数中。现在,您正在尝试检查是否可以创建函数mult。成功后,您将尝试调用它(在那里您会遇到问题)。

`

# shows multiplication table of a number upto that number
import time
while True:
    num = input("Enter number: ")
    def mult():
        try:
            for i in range(1, int(num)+1):
                print(str(i) + " x " + num + " = " + str(i * int(num)))
        except ValueError:
            print("Please enter a number")
            continue

mult()
time.sleep(2)`

这应该可行,另外请注意,如果您想在函数中输入一个值, 应该像这样完成: def mult(数据)

称为: 多('数据')