1.异常处理
try except语句中,至少要有一个except,也可以有多个.也可以加上一个else语句,一个finally语句.
try:
int1=int(input('请输入一个数字: '))
print(1/int1)
except ZeroDivisionError: #0作为分母的异常
print('0不能作为分母')
except ValueError: #输入的是非数字的异常
print('您输入的不是数字')
except: #如果不指定异常类型,则捕获任何出现的异常
print('程序出现错误')
else: #当程序未捕获到任何异常,会执行else中的语句
print('没有出现异常')
# finally: #无论程序是否出现异常,都会执行
finally:
print('程序执行完毕')
常见的异常
NameError 未定义的变量
IndexError 下标越界
FileNotFoundError 找不到文件异常
所有的异常,都是Exception的子类,或者子类的子类,Exception也有一个父类 BaseException
print(NameError.__base__)
print(IndexError.__base__)
print(LookupError.__base__)
print(FileNotFoundError.__base__)
print(OSError.__base__)
print(Exception.__base__)
手动抛出异常
try:
raise IOError #假装这里有异常
except IOError:
print('程序出现了IO错误')
日志模块
日志等级,默认打印WARNING以上级别,可以设置level改为别的级别
import logging
logging.basicConfig(level='DEBUG')
logging.debug('出现debug信息')
logging.info('出现info信息')
logging.warning('出现warning信息')
logging.error('出现error信息')
logging.critical('出现critical信息')
将异常信息记录到日志
time.strftime('%y-%m-%d %H:%M:%S') 记录时间
traceback.format_exc() 返回异常的信息
import time
import logging
import traceback
logging.basicConfig(filename='D:/log210607.log',filemode='a+')
try:
int1=int(input('请输入一个数字: '))
print(1/int1)
except ZeroDivisionError: #0作为分母的异常
logging.error(time.strftime('%y-%m-%d %H:%M:%S')+traceback.format_exc())
except ValueError: #输入的是非数字的异常
logging.error(time.strftime('%y-%m-%d %H:%M:%S')+traceback.format_exc())
except: #如果不指定异常类型,则捕获任何出现的异常
logging.error(time.strftime('%y-%m-%d %H:%M:%S')+traceback.format_exc())
2.第二节课
第9次课思考题
解题思路
1.建立一个老虎的类,老虎的体重是200,有叫的方法,有吃的方法
2.建立一个羊的类,羊的体重是100,有叫的方法,有吃的方法
3.建立一个房间的类
4.将老虎或羊的实例放入房间的实例
5.写游戏相关的代码
①调用叫的方法,如果是老虎就调用老虎的叫的方法,如果是羊就调用羊的叫的方法
②调用吃的方法,如果是老虎就调用老虎的吃的方法,如果是羊就调用羊的吃的方法
③游戏时间的控制
④游戏结束时显示每个房间的动物以及体重
class Tiger:
def __init__(self):
self.name='老虎'
self.weight=200
def eat(self,food):
if food=='meat':
print('喂食正确')
self.weight+=10
elif food=='grass':
print('喂食错误')
self.weight-=10
def roar(self):
print('Wow!!')
self.weight-=5
class Sheep:
def __init__(self):
self.name='羊'
self.weight=100
def eat(self,food):
if food=='grass':
print('喂食正确')
self.weight+=10
elif food=='meat':
print('喂食错误')
self.weight-=10
def roar(self):
print('mie~~')
self.weight-=5
class Room:
def __init__(self,animal):
self.animal=animal
roomlist=[] #定义一个列表,用来存放房间的实例
from random import randint
for i in range(10):
if randint(1,2)==1: #在1和2之间随机取一个整数
animal=Tiger() #实例化一个老虎
else:
animal=Sheep() #实例化一个羊
room=Room(animal) #实例化一个房间
roomlist.append(room) #把房间的实例放入列表
import time
start_time=time.time() #记录游戏开始的时间
while time.time()-start_time<180: #如果游戏时间未超过3分钟,则循环运行游戏
room_number=randint(0,9) #随机选择一个房间
random_room=roomlist[room_number] #选取该房间
load1=input(f'当前访问的是{room_number+1}房间,请问是敲门还是喂食?1表示敲门,2表示喂食')
if load1=='1':
random_room.animal.roar() #调用房间中的动物的叫的方法
elif load1=='2':
food=input('请问喂哪种食物 meat/grass')
if food in ('meat','grass'):
random_room.animal.eat(food) #调用房间中的动物的吃的方法
else:
print('您输入的食物不正确')
else:
print('您的操作不正确,请输入1或2')
else:
print('游戏时间到')
for i in range(len(roomlist)):
print(f'{i+1}号房间的动物是{roomlist[i].animal.name},体重是{roomlist[i].animal.weight}')