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

 

这样的操作即使在代码使用过程中,即使遇到错误,有还是会正常的运行下去,不会报错。

但是在运行过程中,遇到以下几个问题:

  1. 我想退出操作,需要输入两遍 ‘q‘才行。
  2. 如果我输入不是字母‘q’,程序就会报错。
  3. 因为使用了while Ture死循环,可不可以在显示人机交互的次数?方便用户知道信息
  4. 程序整体不够美观

解决方法:

  1. 调换指引用户输入的first_number和second_number位置
  2. 引入isdigit()方法:判断输入是否为数字
  3. 使用占位符 %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 cant 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 cant 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 异常的主要内容,如果未能解决你的问题,请参考以下文章

片段中的Android致命异常

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(代码片段

片段中的getView()导致抛出异常,不确定原因

片段中的 EditText 上的空指针异常 [重复]