zoukankan      html  css  js  c++  java
  • 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 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.
  • 相关阅读:
    [bzoj1613 Usaco2007 Jan]Running贝茜的晨练计划
    [bzoj1600][Usaco2008 Oct]建造栅栏
    [bzoj3208]花神的秒题计划I
    [vijos1011]滑雪
    [noip2007 pjt3] 守望者的逃离
    DP(1) 背包
    快速幂 模板及应用
    BZOJ1303: [CQOI2009]中位数图
    BZOJ1083: [SCOI2005]繁忙的都市
    Bzoj1084: [SCOI2005]最大子矩阵
  • 原文地址:https://www.cnblogs.com/aszeno/p/10305816.html
Copyright © 2011-2022 走看看