Pyton学习总结(7)-异常

本文详细介绍了Python中的异常处理机制,包括不同类型的异常、如何通过try-except语句捕捉和处理异常、自定义异常的创建方法以及finally子句的作用。

处理异常

  • 异常有不同的类型,其类型会作为消息的一部分打印出来,内置的异常 列出了内置的异常以及它们的含义。
while True:
    try:
        x = int(raw_input("Please enter a number: "))
        break
    except ValueError:
        print "Oops!  That was no valid number.  Try again..."
    except (RuntimeError, TypeError, NameError):
        pass
    except IOError as e:
        print "I/O error({0}): {1}".format(e.errno, e.strerror)
    else : 
        pass
  • try语句可能有多个异常子句,用来指定多个不同的异常。不过至多只有一个处理程序将被执行。
  • 如果异常的类型与 except 关键字后面的异常名不匹配,它将被传递给上层的try语句。
  • 一个 except 子句可以用带括号的元组列出多个异常的名字。括号是必须的。
  • else子句必须放在except后面,当try没有抛出异常时将执行该语句,当try执行returnelse子句将不会被执行。
  • 使用else子句比把额外的代码放在try子句中要好,因为它可以避免意外捕获不是由try ... except语句保护的代码所引发的异常。
  • except子句可以在异常名(或元组)之后指定一个变量。这个变量将绑定于一个异常实例,同时异常的参数将存放在实例的args中。
try:
   raise Exception('spam', 'eggs')
except Exception as inst:
   print type(inst)     # the exception instance
   print inst.args      # output : spam eggs
   print inst           # __str__ allows args to be printed directly

引发异常

raise语句允许程序员强行引发一个指定的异常。

try:
    raise NameError('HiThere')
except NameError:
    print 'An exception flew by!'
    raise

自定义异常

class MyError(Exception):
    def __init__(self, value):
        self.value = value
    def __str__(self):
        return repr(self.value)

try:
    raise MyError(2*2)
except MyError as e:
    print 'My exception occurred, value:', e.value
  • 用户可以通过创建新的异常类来命名自己的异常。异常通常应该继承Exception类,直接继承或者间接继承都可以。
  • 创建一个能够引发几种不同错误的模块时,一个通常的做法是为该模块定义的异常创建一个基类,然后基于这个基类为不同的错误情况创建特定的子类。

finally

  • try语句有另一个可选的子句,目的在于定义必须在所有情况下执行的清理操作。
  • 不管有没有发生异常,在离开try语句之前总是会执行finally子句。
  • 另外,假如tryelseexceptfinally语句都包含return时,函数的返回值为最后执行的return语句,也就是finally中的return语句,因为它总是最后执行。
try:
    raise KeyboardInterrupt
finally:
    print 'Goodbye, world!'
源码地址: https://pan.quark.cn/s/a4b39357ea24 遗传算法 - 简书 遗传算法的理论是根据达尔文进化论而设计出来的算法: 人类是朝着好的方向(最优解)进化,进化过程中,会自动选择优良基因,淘汰劣等基因。 遗传算法(英语:genetic algorithm (GA) )是计算数学中用于解决最佳化的搜索算法,是进化算法的一种。 进化算法最初是借鉴了进化生物学中的一些现象而发展起来的,这些现象包括遗传、突变、自然选择、杂交等。 搜索算法的共同特征为: 首先组成一组候选解 依据某些适应性条件测算这些候选解的适应度 根据适应度保留某些候选解,放弃其他候选解 对保留的候选解进行某些操作,生成新的候选解 遗传算法流程 遗传算法的一般步骤 my_fitness函数 评估每条染色体所对应个体的适应度 升序排列适应度评估值,选出 前 parent_number 个 个体作为 待选 parent 种群(适应度函数的值越小越好) 从 待选 parent 种群 中随机选择 2 个个体作为父方和母方。 抽取父母双方的染色体,进行交叉,产生 2 个子代。 (交叉概率) 对子代(parent + 生成的 child)的染色体进行变异。 (变异概率) 重复3,4,5步骤,直到新种群(parentnumber + childnumber)的产生。 循环以上步骤直至找到满意的解。 名词解释 交叉概率:两个个体进行交配的概率。 例如,交配概率为0.8,则80%的“夫妻”会生育后代。 变异概率:所有的基因中发生变异的占总体的比例。 GA函数 适应度函数 适应度函数由解决的问题决定。 举一个平方和的例子。 简单的平方和问题 求函数的最小值,其中每个变量的取值区间都是 [-1, ...
《基于STM32微控制器集成温湿度监测与显示功能的系统实现方案》 本方案提供了一套完整的嵌入式系统设计参考,实现了环境参数的实时采集、可视化呈现与异常状态提示。系统核心采用意法半导体公司生产的STM32系列32位微控制器作为主控单元,负责协调各外设模块的工作流程。 系统通过数字式温湿度复合传感器周期性获取环境参数,该传感器采用单总线通信协议,具有响应迅速、数据可靠的特点。采集到的数值信息通过两种途径进行处理:首先,数据被传输至有机发光二极管显示屏进行实时图形化显示,该显示屏支持高对比度输出,能够在不同光照条件下清晰呈现当前温度与湿度数值;其次,所有采集数据同时通过通用异步收发传输接口输出,可供上位机软件进行记录与分析。 当监测参数超出预设安全范围时,系统会启动声学警示装置,该装置可发出不同频率的提示音,以区分温度异常或湿度异常状态。所有功能模块的驱动代码均采用模块化设计原则编写,包含完整的硬件抽象层接口定义、传感器数据解析算法、显示缓冲区管理机制以及串口通信协议实现。 本参考实现重点阐述了多外设协同工作的时序控制策略、低功耗数据采集模式的应用方法,以及确保系统稳定性的错误处理机制。代码库中包含了详细的初始化配置流程、中断服务程序设计和各功能模块的应用程序接口说明,为嵌入式环境监测系统的开发提供了可靠的技术实现范例。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
Python中设计一个简单的井字棋(Tic Tac Toe)游戏,你需要创建一个二维数组表示棋盘,定义游戏规则,以及处理用户输入和游戏状态检查。以下是一个基础的实现步骤: 1. **初始化棋盘**: ```python board = [[' ' for _ in range(3)] for _ in range(3)] ``` 2. **打印棋盘**: ```python def print_board(): for row in board: print('|'.join(row)) ``` 3. **获取用户输入**: ```python def get_player_move(): while True: try: row, col = map(int, input("请输入行号和列号(0-2),用逗号隔开:").split(',')) if 0 <= row < 3 and 0 <= col < 3 and board[row][col] == ' ': break else: print("无效的位置,请重新输入。") except ValueError: print("输入错误,请输入数字。") return row, col ``` 4. **放置标记**(X或O): ```python def place_mark(player): row, col = get_player_move() board[row][col] = player ``` 5. **检查胜利条件**: ```python def check_win(board, player): # 检查每一行、每一列以及两条对角线是否有三个相同的标记 for i in [0, 1, 2]: if board[i] * 3 == player * 3 or \ board[:,i] * 3 == player * 3 or \ board[(i*2)%3][(i*2)%3:i*2+3:3] * 3 == player * 3 or \ board[(i*2)%3:i*2+3:3][(i*2)%3] * 3 == player * 3: return True # 如果没有,则检查是否所有位置都有标记 if all(' ' not in row for row in board): return False return False ``` 6. **游戏循环**: ```python def play_game(): turn = 'X' while True: print_board() if check_win(board, turn): print(f"玩家{turn}获胜!") break place_mark(turn) turn = 'O' if turn == 'X' else 'X' ``` 7. **主程序**: ```python if __name__ == '__main__': play_game() ``` 这个版本的井字棋游戏是基于文本界面的,如果你想做出图形化的界面,可以使用如Pygame这样的库。完成后别忘了测试并优化游戏逻辑和用户交互。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值