Python try_尝试模块

  • Post author:
  • Post category:python


当我们在运行Python程序时,难免会有一些小错误,比如说我们要输入一个整数,在转换变量类型时可能就会出差错。我们为了避免报错造成的尴尬,所以我们可以用try进行调试。

a = input("请输入一个整数:")
a = int(a)
print("你输入的数+10后等于",a+10)

这时,我们输入一个整数是不会报错的:

请输入一个整数:12

你输入的数+10后等于 22

但当你不小心输入了一个字母,Python就会“疯狂报错”:

请输入一个整数:a


Traceback (most recent call last):

File “main.py”, line 2, in <module>

a = int(a)

ValueError: invalid literal for int() with base 10: ‘a’

或许你输入了一个小数,但Python可不接受:

请输入一个整数:10.5


Traceback (most recent call last):

File “main.py”, line 2, in <module>

a = int(a)

ValueError: invalid literal for int() with base 10: ‘10.5’

那我们该如何避免报错呢?

Python为我们提供了“try”模块:

try:
    # 尝试
except:
    # 如果报错,那么

当在进行try测试时,如果不报错,我们也另可执行代码。只需增添else。

try:
    # 尝试
except:
    # 如果报错,那么
else:
    # 如果不报错,那么

那么我们就可以使用try了:

a = input("请输入一个整数:")
def int_a(a):
    # 定义函数以在错误的时候循环
    try:
        # “try”关键字里,我们想执行的全部代码都会进行尝试
        int(a)
        pass
    except:
        # 如果错误,那么重新输入并再次判断
        b = input("输入的数错误,请重新输入!")
        int_a(b)
        pass
    else:
        # 如果没有报错,继续执行代码
        a = int(a)
        print("你输入的数+10后等于",a+10)
        pass
    return
int_a(a)     # 运行代码

输入字母或小数,Python会提醒我们重新输入:

请输入一个整数:a

输入的数错误,请重新输入!10.5

输入的数错误,请重新输入!9

你输入的数+10后等于 19


我们还可以编译这样的代码:

a = input("请输入一个数或一条算式:")
a = eval(a)
print("这个数(或算式的结果)等于",a)

输入一个整数:

请输入一个数或一条算式:9

这个数(或算式的结果)等于 9

输入一个小数:

请输入一个数或一条算式:2.5

这个数(或算式的结果)等于 2.5

在输入一条算式:

请输入一个数或一条算式:3*4

这个数(或算式的结果)等于 12

可当你输入出错时,Python会给你严重的一击:

请输入一个数或一条算式:wwww


Traceback (most recent call last):

File “main.py”, line 2, in <module>

a = eval(a)

File “<string>”, line 1, in <module>

NameError: name ‘wwww’ is not defined


或者你输入了标点:

请输入一个数或一条算式:。。。。


Traceback (most recent call last):

File “C:\Users\ASUS\学而思直播\code\cache\asset\6/main.py”, line 34, in <module>

a=eval(a)

File “<string>”, line 1

。。。。

^

SyntaxError: invalid character in identifier

这时你会发现一个报的是“NameError” (名字错误),另一个报的是“SyntaxError” (语法错误),当你想区分两种情况时,如果单独使用try-except-else,所有报错都是一种情况,这可真让人头疼。

但Python为我们提供了一个解决办法:

try:
    # 判断语句
except *******:  # 添加报错类型,比如ValueError、NameError、SyntaxError等
    # 报错时执行
else:
    # 不报错时执行

这样我们便可以设置了:

(注:假如你输入的错误值正好等于你设置的变量名,那么虽然不会报错,但也达不到我们想要的效果。并且输入三个小数点会变成省略号。所以需要增添两层判断)

a = input("请输入一个数或一条算式:")   # 输入a
def eval_a(a):
    # 定义函数以在错误时循环
    try:
        # 尝试把变量a转化成数值
        eval(a)
        pass
    except NameError:
        # 如果报名字错误,那么重新输入
        b = input("\033[31m请不要输入字母或汉字!\033[0m")
        eval_a(b)
        pass
    except SyntaxError:
        # 如果报语法错误,那么重新输入
        b = input("\033[31m请不要输入标点符号!\033[0m")
        eval_a(b)
    else:
        # 如果不报错
        a = eval(a)
        if a == 'a':
            # 如果变量a等于字符‘a’(这个错误无法被NameError发现)
            b = input("\033[31m请不要输入字母!\033[0m")
            eval_a(b)
            pass
        elif a == Ellipsis:
            # 如果变量a等于Ellipsis省略号(这个错误无法被SyntaxError发现)
            b = input("\033[31m请不要输入省略号!\033[0m")
            eval_a(b)
            pass
        else:
            # 否则,一切正常,按计划实行
            print("这个数(或算式的结果)等于",a)
            pass
        pass
    return
eval_a(a)   # 运行函数

开始测试:

请输入一个数或一条算式:…


请不要输入省略号!

assd


请不要输入字母或汉字!

a


请不要输入字母!

。。。。


请不要输入标点符号!

4

这个数(或算式的结果)等于 4


总结:

当我们在Python程序运行时遇到了报错情况,可以使用try模块:

try:
    # 判断语句
except *******:  # 添加报错类型,比如ValueError、NameError、SyntaxError等
    # 报错时执行
else:
    # 不报错时执行



版权声明:本文为fh20100529原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。