1前戏:猜数字游戏

题目描述:

电脑产生一个零到100之间的随机数字,然后让用户来猜,如果用户猜的数字比这个数字大,提示太大,否则提示太小,当用户正好猜中电脑会提示,“恭喜你猜到了这个数是…”。在用户每次猜测之前程序会输出用户是第几次猜测,如果用户输入的根本不是一个数字,程序会告诉用户"输入无效"。
解题:

import random
def guess_num():
    target = random.randint(1,100)
    i=0

    while True:
        i = i+1
        print("\n这是你第%d次猜测数字"%i)
        num = input('请输入1到100的整数:')
        try:
            guess = int(num)
            if guess==target:
                print("恭喜你猜到了,这个数字是 "+str(target) + ","+"您总共猜了%d次!"%i)
                break
            elif guess < target:
                print("你输入的数字小了,请重新输入\n")
            else:
                 print("你输入的数字大了,请重新输入\n")
        except ValueError:
            print("输入无效! 请重新输入整数")
guess_num()

在学习python异常处理之前,首先你要理解python有哪些常见的错误类型,这些错误类型都是怎么产生的。要熟悉这些错误类型,可以编写相应的程序命令,出现相应的错误类型以便快速熟悉python中常见的错误。接着当你看到这些错误类型时,你就可以轻车熟路找到对应的错误在哪,怎么处理。当某类错误是允许发生或者这种错误往往是人为或习惯造成的系统性,你又想让程序能够执行语句。这时你就需要try…except…

2常见的异常出错

下面是来源于Datawhale github 的分享。常见错误类型:

BaseException:所有异常的 基类
 Exception:常规异常的 基类
 StandardError:所有的内建标准异常的基类
 ArithmeticError:所有数值计算异常的基类
 FloatingPointError:浮点计算异常
 OverflowError:数值运算超出最大限制
 ZeroDivisionError:除数为零
 AssertionError:断言语句(assert)失败
 AttributeError:尝试访问未知的对象属性
 EOFError:没有内建输入,到达EOF标记
 EnvironmentError:操作系统异常的基类
 IOError:输入/输出操作失败
 OSError:操作系统产生的异常(例如打开一个不存在的文件)
 WindowsError:系统调用失败
 ImportError:导入模块失败的时候
 KeyboardInterrupt:用户中断执行
 LookupError:无效数据查询的基类
 IndexError:索引超出序列的范围
 KeyError:字典中查找一个不存在的关键字
 MemoryError:内存溢出(可通过删除对象释放内存)
 NameError:尝试访问一个不存在的变量
 UnboundLocalError:访问未初始化的本地变量
 ReferenceError:弱引用试图访问已经垃圾回收了的对象
 RuntimeError:一般的运行时异常
 NotImplementedError:尚未实现的方法
 SyntaxError:语法错误导致的异常
 IndentationError:缩进错误导致的异常
 TabError:Tab和空格混用
 SystemError:一般的解释器系统异常
 TypeError:不同类型间的无效操作
 ValueError:传入无效的参数
 UnicodeError:Unicode相关的异常
 UnicodeDecodeError:Unicode解码时的异常
 UnicodeEncodeError:Unicode编码错误导致的异常
 UnicodeTranslateError:Unicode转换错误导致的异常

3、Try… Except…(else)

1.基本结构:
下面小程序是一个简单的,输入两个数字,返回相除后的结果。当分母出现零时,提示错误。不为零时正常运行。

【例子】
#ZeroDivisionError, try....except....
def divide(a,b):
    try:
        result = a/b
        print(result)
    except ZeroDivisionError:
        print("除数为零,请检查")
    
divide(10,20)  #0.5
divide(2,2)    #1
divide(2,0)    #除数为零,请检查

输出结果:

0.5
1.0
除数为零,请检查
从上面这个例子,我们可以熟悉try...except 结构。
Try:
	你想要的执行的语句
except xxxerror(你已经知道的某类错误):
	当发生错误时,你希望展现的是什么
"""
当然try...语句中可以嵌套多个except 字句, 但分别来处理不同的特定的异常。最多只有一个分支会被执行。
"""