我们的项目越来越大,前几天我遇到了这个问题,当时我试图向函数添加一个简单的错误消息:
def create_report(id):
report = new_report(id)
if not report:
raise api_error('Could not find report with id %d' % (id,))
...
有什么问题吗?id
是一个字符串,当它试图将其格式化为数字时,它崩溃了。我不是函数的原始作者,错误地认为id
是一个数字。相反,它应该是一个字符串。哎呀。你知道吗
如果这是一种强类型语言,我会立刻从编译器那里得到一个错误;处理这类事情的最佳方法是什么?我是应该检查每个参数的类型(看起来像是做了很多手脚),还是应该把所有的东西都放在try:
块中?也许我们应该在每个函数中写一个注释来描述它的参数?还是我应该更清楚?你知道吗
该格式字符串应该使用
%s
,不是因为id
是字符串,而是因为它通常是最佳选择。%d
需要数字类型,但%s
将在必要时将其他类型转换为字符串。只有在需要更改数字格式时才应该使用%d
。你知道吗一个可能的策略是在参数类型方面使这些东西更健壮:
它看起来并不总是很漂亮,但至少不会轻易折断。你知道吗
但总的来说,对函数有明确的约定总是更好的。docstring就是这个地方。你知道吗
如果您真的想确保字符串打印函数不会崩溃,最好使用%s,它使用pythons str()-函数将集成值转换为字符串。 看看你所说的ID,我假设它是int类型的——在这种情况下,这个解决方案应该很好(如果你使用float,我不太确定str()会保留多少个数字)。你知道吗
编辑 哦,孩子,我太慢了。。。你知道吗
相关问题 更多 >
编程相关推荐