在程序运行的时候,如果不想程序因为报错为停止执行,可以添加异常处理。
在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)
这样就算用户恶意输入字母,程序也有应对的方法啦。
异常处理在处理文件的时候同样非常重要
例如:
def counts(file_name): try: with open(file_name) as file: words = file.read().split() except FileNotFoundError: print("sorry," + file_name + " doesn't exist!") else: words_num = len(words) print(words_num) books = ['test.txt','test2.txt','test3.txt','test4.txt'] for book in books: counts(book)
这里定义了一个函数,其作用是数出文件中的单词个数,其中对文件不存在的情况作出了异常处理。
其执行结果如下。
本文为原创文章
转载请注明出处!