Chinaunix首页 | 论坛 | 博客
  • 博客访问: 19887571
  • 博文数量: 679
  • 博客积分: 10495
  • 博客等级: 上将
  • 技术积分: 9308
  • 用 户 组: 普通用户
  • 注册时间: 2006-07-18 10:51
文章分类

全部博文(679)

文章存档

2012年(5)

2011年(38)

2010年(86)

2009年(145)

2008年(170)

2007年(165)

2006年(89)

分类: Python/Ruby

2009-08-18 10:44:04

例外

什么是例外

>>> 1/0

Traceback (most recent call last):

File "", line 1, in ?

ZeroDivisionError: integer division or modulo by zero

 

出现例外的方法

>>> raise Exception('hyperdrive overload')

Traceback (most recent call last):

File "", line 1, in ?

Exception: hyperdrive overload

 

查看例外种类:

>>> import exceptions

>>> dir(exceptions)

['ArithmeticError', 'AssertionError', 'AttributeError', ...]

 

>>> raise ArithmeticError

Traceback (most recent call last):

File "", line 1, in ?

ArithmeticError

重要的例外种类见教材186

 

自定义例外类:

class SomeCustomException(Exception): pass

获取例外

x = input('Enter the first number: ')

y = input('Enter the second number: ')

print x/y

 

Enter the first number: 10

Enter the second number: 0

Traceback (most recent call last):

File "exceptions.py", line 3, in ?

print x/y

ZeroDivisionError: integer division or modulo by zero

 

try:

x = input('Enter the first number: ')

y = input('Enter the second number: ')

print x/y

except ZeroDivisionError:

print "The second number can't be zero!"

 

也可以用if语句来判断,不过如果有多个分母,一个try就可以搞定了。

 

在没有交互式的情况,使用print更好:

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

 

>>> calculator = MuffledCalculator()

>>> calculator.calc('10/2')

5

>>> calculator.calc('10/0') # No muffling

Traceback (most recent call last):

File "", line 1, in ?

File "MuffledCalculator.py", line 6, in calc

return eval(expr)

File "", line 0, in ?

ZeroDivisionError: integer division or modulo by zero

>>> calculator.muffled = True

>>> calculator.calc('10/0')

Division by zero is illegal

 

同时捕捉多个错误:

try:

x = input('Enter the first number: ')

y = input('Enter the second number: ')

print x/y

except ZeroDivisionError:

print "The second number can't be zero!"

except TypeError:

print "That wasn't a number, was it?"

 

try:

x = input('Enter the first number: ')

y = input('Enter the second number: ')

print x/y

except (ZeroDivisionError, TypeError, NameError):

print 'Your numbers were bogus...'

 

log记录例外:

try:

x = input('Enter the first number: ')

y = input('Enter the second number: ')

print x/y

except (ZeroDivisionError, TypeError), e:

print e

 

捕捉所有错误:

try:

x = input('Enter the first number: ')

y = input('Enter the second number: ')

print x/y

except:

print 'Something wrong happened...'

       一般不建议使用,可能会隐藏错误。

 

try:

print 'A simple task'

except:

print 'What? Something went wrong?'

else:

print 'Ah... It went as planned.'

If you run this, you get the following output

 

try:

1/0

except NameError:

print "Unknown variable"

else:

print "That went well!"

finally:

print "Cleaning up."

 

阅读(2467) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~