1.python标准异常总结
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转换错误导致的异常
2.pyhton标准警告总结
Warning
:警告的基类DeprecationWarning
:关于被弃用的特征的警告FutureWarning
:关于构造将来语义会有改变的警告UserWarning
:用户代码生成的警告PendingDeprecationWarning
:关于特性将会被废弃的警告RuntimeWarning
:可疑的运行时行为(runtime behavior)的警告SyntaxWarning
:可疑语法的警告ImportWarning
:用于在导入模块过程中触发的警告UnicodeWarning
:与Unicode相关的警告BytesWarning
:与字节或字节码相关的警告ResourceWarning
:与资源使用相关的警告
3.try - except 语句
try:
<代码块1>
except <异常类型>:
<代码块2>
代码块1是正常执行的程序,当发生except
后面的异常类型时,将转而执行代码块2的程序
【例】
try:
num = int(input('输入一个整数:'))
print(num/2)
except NameError:
print('出错,请重新输入')
try - except
语句可包含多个except
子句
try:
<代码块1>
except <异常类型1>:
<代码块2>
...
except <异常类型n>:
<代码块n>
【例】
try:
int("abc")
s = 1 + '1'
f = open('test.txt')
print(f.read())
f.close()
except OSError as error:
print('打开文件出错\n原因是:' + str(error))
except TypeError as error:
print('类型出错\n原因是:' + str(error))
except ValueError as error:
print('数值出错\n原因是:' + str(error))
# 数值出错
# 原因是:invalid literal for int() with base 10: 'abc'
***try - except
语句可与else
、finally
配合***
【例1】
【例2】
如图所示,【例1】为正常处理流程,【例2】为异常处理流程
4.raise语句
当程序出现错误,python会自动引发异常,也可以通过raise
显示地引发异常。一旦执行了raise语句,raise后面的语句将不能执行。
try:
raise NameError('HiThere')
except NameError:
print('An exception flew by!')
# An exception flew by!
作业
猜数字游戏
题目描述:
电脑产生一个零到100之间的随机数字,然后让用户来猜,如果用户猜的数字比这个数字大,提示太大,否则提示太小,当用户正好猜中电脑会提示,“恭喜你猜到了这个数是…”。在用户每次猜测之前程序会输出用户是第几次猜测,如果用户输入的根本不是一个数字,程序会告诉用户"输入无效"。
(尝试使用try catch异常处理结构对输入情况进行处理)
获取随机数采用random模块。
from random import randint
num0 = randint(0,100)
print(num0)
frequency = 1
try:
print("{:-^50}".format('猜数字开始啦'))
print('第1次猜测')
num_input = int(input('请输入一个0-100的整数:\n'))
while True:
frequency += 1
print('第{}次猜测'.format(frequency))
if num_input > num0:
num_input = int(input('猜大啦!请重新输入:\n'))
if num_input < num0:
num_input = int(input('猜小啦!请重新输入:\n'))
if num_input == num0:
print('猜对啦!!!')
break
except ValueError:
print('输入无效')