Python_14

  1. 1.
_metaclass_=type#确定使用新式类,不用担心,Python3.0以后旧式类不存在了

class Filter:
    def init(self):
        self.block=[]
    def filter(self,sequence):
        return [x for x in sequence if x not in self.block]

class SPAMFilter(Filter):
    def init(self):
        self.block=['SPAM']


使用SPAMFilter作为Filter的子类,通过重写init函数,来过滤掉’SPAM’。

>>> f=SPAMFilter()
>>> f.init()
>>> f.filter(['SPAM','!!!','SPAM','LALA','SPAM'])
['!!!', 'LALA']
  1. 2.
_metaclass_=type#确定使用新式类,不用担心,Python3.0以后旧式类不存在了

class Calculator:
    def calculate(self,expression):
        self.value=eval(expression)

class Talker:
    def talk(self):
        print 'Hi, my value is',self.value


class TalkingCalculator(Calculator,Talker):
    pass


多重继承的简单例子。

>>> tc=TalkingCalculator()
>>> tc.calculate('1+3*2')
>>> tc.talk
<bound method TalkingCalculator.talk of <__main__.TalkingCalculator instance at 0x06485F30>>
>>> tc.talk()
Hi, my value is 7
  1. 3.
_metaclass_=type#确定使用新式类,不用担心,Python3.0以后旧式类不存在了

class MuffledCalculator:
    muffled=False
    def calc(self,expr):
        try:
            return eval(expr)
        except ZeroDivisionError:
            if self.muffled:
                print 'Division by zero is illegal'
            else:
                raise

这里捕获了异常,并且给了一个打开和关闭屏蔽异常的开关。

>>> calcutor=MuffledCalculator()
>>> calcutor.calc('10/0')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:/Users/50258/.spyder2/.temp.py", line 15, in calc
    return eval(expr)
  File "<string>", line 1, in <module>
ZeroDivisionError: integer division or modulo by zero
>>> calcutor.muffled=True
>>> calcutor.calc('10/0')
Division by zero is illegal
  1. 4.
try:
    x=input('Please input first number:')
    y=input('Please input second number:')
    print x/y
except ZeroDivisionError:
    print 'The second is zero!'
except NameError:
    print 'Type wrong!'

多条Except语句。

Please input first number:1
Please input second number:s
Type wrong!

  1. 5.
try:
    x=input('Please input first number:')
    y=input('Please input second number:')
    print x/y
except (ZeroDivisionError,NameError),e:
    print e

一个块捕捉多个异常,并通过e打印出来。Python3.0使用”except (ZeroDivisionError,NameError) as e”

>>> runfile('C:/Users/50258/.spyder2/.temp.py', wdir=r'C:/Users/50258/.spyder2')
Please input first number:s
name 's' is not defined
>>> runfile('C:/Users/50258/.spyder2/.temp.py', wdir=r'C:/Users/50258/.spyder2')
Please input first number:10
Please input second number:0
integer division or modulo by zero
  1. 6.
while True:    
    try:
        x=input('Please input first number:')
        y=input('Please input second number:')
        print x/y
    except Exception,e:
        print 'Invalid input:',e
        print 'Inpur again'
    else:
        break

简单的循环输入,直到符合条件计算出结果。

Please input first number:5
Please input second number:0
Invalid input: integer division or modulo by zero
Inpur again
Please input first number:2
Please input second number:s
Invalid input: name 's' is not defined
Inpur again
Please input first number:3
Please input second number:4
0
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值