try/except/finally
try:
i = 10 / 0
print(i)
print('xixixi')
except ZeroDivisionError as e:
print(e)
finally:
print('sherlock blaze')
try下是可能发生异常的部分,except xxx 是要捕获的异常类型,finally是收尾工作,无论异常是否发生都会执行。
logging
import logging
try:
i = 10 / 0
print(i)
print('xixixi')
except ZeroDivisionError as e:
print(e)
logging.exception(e)
finally:
print('sherlock blaze')
使用logging,可以记录日志。可以将日志记录到文件中,方便查询。
raise
n = 0
if n == 0:
raise ValueError('it\'s should not be zero')
else:
i = 10 / n
print(i)
使用raise可以抛出异常,你也可以抛出自定义异常
class ZeroError(ValueError):
pass
n = 0
if n == 0:
raise ZeroError('it\'s should not be zero')
else:
i = 10 / n
print(i)
assert
n = 0
assert n != 0, 'n is zero'
i = 10 / n
print(i)
通过上述代码,我们可以判断n是否为0,如果不为0,为True,程序会继续往下走,否则会抛出异常。
unittest
import unittest
通过上述语句,可以导入单元测试模块,并编写单元测试。
import unittest
class Dict(dict):
def __init__(self, **kw):
super().__init__(**kw)
def __getattr__(self, key):
try:
return self[key]
except KeyError:
raise AttributeError('no key named %s' % key)
def __setattr__(self, key, value):
self[key] = value
class test(unittest.TestCase):
def test_init(self):
d = Dict(a=1, b='sherlock')
self.assertEqual(d.a, 1)
self.assertEqual(d.b, 'sherlock')
self.assertTrue(isinstance(d, dict))
通过上述代码,我们成功写了一个测试类,按道理,把他们分开是更好的