gpt4 book ai didi

python - 如果不使用 python 对象的属性,我如何避免对其进行类型检查?

转载 作者:太空宇宙 更新时间:2023-11-03 13:05:05 25 4
gpt4 key购买 nike

我在这里找到了 type checking 的答案一般来说,类型检查 numbers , 并为 strings 进行类型检查.大多数人的回应似乎是说类型检查应该从不在 python (< 2.6) 中执行,因为 duck typing。我对鸭子类型的(有限的)理解是类型是通过使用对象的属性来确定的。如果我不使用任何属性,我该怎么办?

我有一个简单的函数,它根据参数确定常量,参数应该是一个数字。我提出了一个由

定义的异常
class outOfBoundsError(ValueError):
"""
Specified value is outside the domain.
"""

有一条消息告诉他们他们给我的数字太大了。我想保持此消息的具体性。但如果参数是一个字符串(如 'charlie'),它仍然认为参数大于我指定的数字(并引发我的异常)。我是否应该在代码中添加一个虚拟行,例如 argument + 2 以便引发 TypeError?

注意:我对 ABC 一无所知,但我认为我无法使用它们,因为我们可以访问的最新 python 版本是 2.5 : (。

最佳答案

针对此问题的一个常见的鸭子式 Python 解决方案是(尝试)将您获得的内容转换为您需要的内容。例如,如果您需要一个整数:

def getconstants(arg):
try:
arg = int(arg)
except:
raise TypeError("expected integer, or something that can be converted to one, but got " + repr(arg))

int 类型构造函数知道如何处理许多内置类型。此外,可转换为 int 类型的类型可以实现 __int__() 特殊方法,这将允许它们在这里使用。如果用户传入一个字符串,只要它只包含数字就可以正常工作。

您执行某些只能对数字类型执行的操作(例如加 2)的想法是相似的,并且在许多情况下效果很好,但是对于可以转换为所需类型的字符串会失败,所以我更喜欢类型转换。

如果不使用 try/except,您可能会过得去,因为 int() 会引发 TypeErrorValueError 如果它不能进行转换,但我认为 TypeError 更合适,因为您主要对对象的类型感兴趣,所以我选择捕获异常并始终引发 TypeError

关于python - 如果不使用 python 对象的属性,我如何避免对其进行类型检查?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5626815/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com