python----异常处理

在程序运行的时候,如果不想程序因为报错为停止执行,可以添加异常处理。

在try,except的语句中,可以根据程序可能发生的错误,来指定当发生该错误的时候,应该执行什么操作。

例如:

print(5/0)

根据错误的提示,我们可以编写如下代码。

try:
    print(5/0)
except ZeroDivisionError:
    print("you cant /0")

错误例子:

print("Give me two numbers,and i'll divide them!!!")
print("Enter 'q' to quit!")

while True:
    first_number = input('first_number: ')
    if first_number == 'q':
        break
    second_number = input('second_number: ')
    if second_number == 'q':
        break
    try:
        answer = int(first_number) / int(second_number)
    except ZeroDivisionError:
        print("you can't input 0 to second_number!")
    print(answer)

在此例子中,要求用户输入两个字,求出其商。并针对用户输入的第二个数做出异常处理,假如用户在第二个数输入0,则会有相关的错误提示。

但是此例子中有一处错误,代码最后的print(answer)是单独放在循环中的,并没有镶嵌进try,except模块中,因此,当用户输入0后,程序异常,并打印出提示信息,最后还是会把answer打印出来。但是既然用户输入了0,程序执行出错,那answer是哪里来的呢?具体看下图,

第一次运算中,得出answer的值为5,而第二次运算程序出错,并没有得出answer,因此,此时的answer仍是上一次运算的answer。

遇到这种情况,我们应该把代码修改如下:

print("Give me two numbers,and i'll divide them!!!")
print("Enter 'q' to quit!")

while True:
    first_number = input('first_number: ')
    if first_number == 'q':
        break
    second_number = input('second_number: ')
    if second_number == 'q':
        break
    try:
        answer = int(first_number) / int(second_number)
    except ZeroDivisionError:
        print("you can't input 0 to second_number!")
    else:
        print(answer)

此代码把最后打印answer放在了try,except模块中。这里表示,print(answer)只会在try下面的代码执行成功的情况下执行,当程序报错时,则不会执行print(answer),这样就避免了用户输入一个错误的数字,但是仍然打印一个answer给用户啦。

总结:

在文件异常处理中,应该把在try下代码成功执行的情况下,才会去执行的代码,放进else下面。

例子:

假如代码中需要针对多种异常状态做出处理,则在try,except模块中再加一条except即可。

print("Give me two numbers,and i'll divide them!!!")
print("Enter 'q' to quit!")

while True:
    first_number = input('first_number: ')
    if first_number == 'q':
        break
    second_number = input('second_number: ')
    if second_number == 'q':
        break
    try:
        answer = int(first_number) / int(second_number)
    except ZeroDivisionError:
        print("you can't input 0 to second_number!")
    except ValueError:
        print("you can't input character into number!")
    else:
        print(answer)

这样就算用户恶意输入字母,程序也有应对的方法啦。

本文为原创文章

转载请注明出处!

猜你喜欢

转载自www.cnblogs.com/QicongLiang/p/9923651.html
今日推荐