分类: Python/Ruby
2009-08-18 10:44:04
>>> 1/0
Traceback (most recent call last):
File "
ZeroDivisionError: integer division or modulo by zero
>>> raise Exception('hyperdrive overload')
Traceback (most recent call last):
File "
Exception: hyperdrive overload
查看例外种类:
>>> import exceptions
>>> dir(exceptions)
['ArithmeticError', 'AssertionError', 'AttributeError', ...]
>>> raise ArithmeticError
Traceback (most recent call last):
File "
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 "
File "MuffledCalculator.py", line
6, in calc
return eval(expr)
File "
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."