如何使用动态键入进行保护

2024-04-18 04:03:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我们的项目越来越大,前几天我遇到了这个问题,当时我试图向函数添加一个简单的错误消息:

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:块中?也许我们应该在每个函数中写一个注释来描述它的参数?还是我应该更清楚?你知道吗


Tags: 项目函数字符串reportid消息类型new
3条回答

该格式字符串应该使用%s,不是因为id是字符串,而是因为它通常是最佳选择。%d需要数字类型,但%s将在必要时将其他类型转换为字符串。只有在需要更改数字格式时才应该使用%d。你知道吗

一个可能的策略是在参数类型方面使这些东西更健壮:

def create_report(id):
    report = new_report(id)
    if not report:
        raise api_error('Could not find report with id %s' % (id,))
    ...

它看起来并不总是很漂亮,但至少不会轻易折断。你知道吗

但总的来说,对函数有明确的约定总是更好的。docstring就是这个地方。你知道吗

如果您真的想确保字符串打印函数不会崩溃,最好使用%s,它使用pythons str()-函数将集成值转换为字符串。 看看你所说的ID,我假设它是int类型的——在这种情况下,这个解决方案应该很好(如果你使用float,我不太确定str()会保留多少个数字)。你知道吗

编辑 哦,孩子,我太慢了。。。你知道吗

相关问题 更多 >