python 异常
Posted 测试情报局
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 异常相关的知识,希望对你有一定的参考价值。
异常
定义:python使用被称为异常的特殊对象来管理程序执行期间发生的错误,每当发生让python不知所措的错误时,它都会创建一个异常对象。
1、处理ZeroDivisionError异常
先看下不处理异常的情况
1 print(5/0)
执行结果:
1 Traceback (most recent call last): 2 File "C:/pycharm/python3/python异常.py", line 4, in <module> 3 print(5/0) 4 ZeroDivisionError: division by zero
数字0不能作为除数,就会报错,那么如何处理Traceback异常。
2、使用try - except代码块
当你认为可能发生错误时,可编写一个try - except异常:
#python:异常
try:
print(5/0)
except ZeroDivisionError:
print("You can‘t divide by zero!")
执行结果:
You can‘t divide by zero!
这样操作,就不会有直接报错,代码也可以正常运行并给你想知道的结果。
1、使用异常避免崩溃,使用else语句
1 #使用异常避免崩溃,使用else代码块
2 print("Hi,给我2个数字,我做除法运算。")
3 print(10 * ‘-‘ + ‘分割线‘ + 10 * ‘-‘) 4 print("input ‘q‘ is exit:") 5 6 while True: 7 first_number = input(‘give me a first_number:‘) 8 second_number = input(‘give me a second_number:‘) 9 if first_number == ‘q‘: 10 break
11 elif second_number == ‘q‘: 12 break 13 try: 14 answer =int(first_number)/int(second_number) 15 except ZeroDivisionError: 16 print("You can‘t divide by zero!") 17 18 else: 19 print(answer) 20 print(10*‘-‘ + ‘底线‘ + 10*‘-‘)
执行结果:
Hi,给我2个数字,我做除法运算。
----------分割线----------
input ‘q‘ is exit:
give me a first_number:520
give me a second_number:6
86.66666666666667
----------底线----------
give me a first_number:500
give me a second_number:0
You can‘t divide by zero!
give me a first_number:‘q‘
Process finished with exit code 0
这样的操作即使在代码使用过程中,即使遇到错误,有还是会正常的运行下去,不会报错。
但是在运行过程中,遇到以下几个问题:
- 我想退出操作,需要输入两遍 ‘q‘才行。
- 如果我输入不是字母‘q’,程序就会报错。
- 因为使用了while Ture死循环,可不可以在显示人机交互的次数?方便用户知道信息
- 程序整体不够美观
解决方法:
- 调换指引用户输入的first_number和second_number位置
- 引入isdigit()方法:判断输入是否为数字
- 使用占位符 %s,累加次数
优化后的代码:
1 print("Hi,给我2个数字,我做除法运算。") 2 print(10 * ‘-‘ + ‘分割线‘ + 10 * ‘-‘) 3 print("input character is exit!") 4 number = 2 5 6 while True: 7 first_number = input(‘give me a first_number:‘) 8 if first_number.isdigit() == False: 9 print(10 * ‘-‘ + ‘ByB‘ + 10 * ‘-‘) 10 break 11 second_number = input(‘give me a second_number:‘) 12 if second_number.isdigit() == False: 13 print(10 * ‘-‘ + ‘ByB‘ + 10 * ‘-‘) 14 break 15 try: 16 answer =int(first_number)/int(second_number) 17 except ZeroDivisionError: 18 print("You can‘t divide by zero!") 19 20 else: 21 print(answer) 22 print(10*‘-‘ + ‘第%s轮‘%number + 10*‘-‘) 23 number += 1
执行结果:
Hi,给我2个数字,我做除法运算。 ----------分割线---------- input character is exit! give me a first_number:520 give me a second_number:2 260.0 ----------第2轮---------- give me a first_number:2 give me a second_number:0 You can‘t divide by zero! give me a first_number:python ----------ByB----------
3、处理文件找不到的异常
有时候,查找文件,并读取其中的数据,如果找不到程序就会报错,那么我们怎么处理这种异常?
同样,使用try...except代码块操作
代码:
1 filename = ‘new_file3.txt‘ 2 3 try: 4 with open(filename) as file_objects: 5 contents = file_objects.read() 6 print(contents) 7 except FileNotFoundError: 8 print("sorry,we can‘t find the " + filename + ‘ file‘)
执行结果:
sorry,we can‘t find the new_file3.txt file
再试下之前学习的文件操作,读取一个存在的文件试试:
代码:
1 filename = ‘new_file.txt‘ #定义文件名称 2 3 try: 4 with open(filename) as file_objects: 5 contents = file_objects.read() #读取文件内容 6 print(contents) #打印文件内容 7 except FileNotFoundError: 8 print("sorry,we can‘t find the " + filename + ‘ file‘)
执行结果:
I love python.
以上是关于python 异常的主要内容,如果未能解决你的问题,请参考以下文章
mvn命令异常:An error has occurred in Javadoc report generation: Unable to find javadoc command异常已解决(代码片段
mvn命令异常:An error has occurred in Javadoc report generation: Unable to find javadoc command异常已解决(代码片段
springcloud报错-------关于 hystrix 的异常 FallbackDefinitionException:fallback method wasn't found(代码片段