契约回归、灰度与退役:练习答案
练习解答
以下是完整离线文件,保存为answer.py后运行python answer.py;先建立与正文一致的初始状态,再验证变体。
python
def decode(envelope):
if envelope.get('isError') is not False:raise RuntimeError('not explicit success')
blocks=envelope.get('content',[])
texts=[b['text'] for b in blocks if b.get('type')=='text']
if not texts:raise ValueError('missing text result')
return '\n'.join(texts)
assert decode({'isError':False,'content':[{'type':'text','text':'ok'}]})=='ok'
for e in [{'isError':True,'content':[{'type':'text','text':'failed'}]},{}]:
try:decode(e)
except RuntimeError:pass
else:raise AssertionError('error became success')
print('result decoder passed')
value={'isError':False,'content':[{'type':'text','text':'a'},
{'type':'image','data':'omitted'},{'type':'text','text':'b'}]}
assert decode(value)=='a\nb'解码器只承诺文本兼容。需要图片的业务必须保留图片块并由宿主显示,不能把忽略图片称作完整兼容。