《Python核心编程》第10章 错误和异常 练习

10–6. 改进的 open().

为内建的 open() 函数创建一个封装. 使得成功打开文件后, 返回文件句柄; 若打开失败则返回给调用者 None , 而不是生成一个异常. 这样你打开文件时就不需要额外的异常处理语句.

def safe_open(name=None, mode='r'):
    try:
        f = open(name, mode)
    except IOError:
        f = None
    return f

if __name__ == '__main__':
    f = safe_open('1.txt')
    print f
10–8. 改进的 raw_input() .

本章的开头, 我们给出了一个"安全"的 float() 函数,它建立在内建函数 float() 上, 可以检测并处理 float() 可能会引发的两种不同异常. 同样,raw_input() 函数也可能会生成两种异常, EOFError (文件末尾 EOF, 在 Unix 下是由于按下了Ctrl+D 在 Dos 下是因为 Ctrl+Z) 或是 KeyboardInterrupt ( 取消输入, 一般是由于按下了Ctrl+C). 请创建一个封装函数 safe_input() , 在发生异常时返回 None .

def safe_input(prompt):
    try:
        content = raw_input(prompt)
    except EOFError, KeyboardInterrupt:
        content = None
    return content

if __name__ == '__main__':
    f = safe_input('input: ')
    print f
10–9. 改进的 math.sqrt().

math 模块包含大量用于处理数值相关运算的函数和常量. 不幸的是, 它不能识别复数, 所以我们创建了 cmath 模块来支持复数相关运算. 请创建一个safe_sqrt() 函数, 它封装 math.sqrt() 并能处理负值, 返回一个对应的复数.

import math
import cmath

def safe_sqrt(num):
    try:
        ret = math.sqrt(num)
    except ValueError:
        ret = cmath.sqrt(num)
    return ret

if __name__ == '__main__':
    print safe_sqrt(12)
    print safe_sqrt(-1)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值