【发布时间】:2013-01-10 08:51:21
【问题描述】:
说明:
我读过很多关于在 python 中检查值类型的意见,大多数人说你不应该检查类型,而是使用 try 和 except。 我想澄清几件事。
问题:
当我有这样的方法时:
def set_age(self, age):
self._age = age
我不能让用户传递除 int 以外的任何类型,因为稍后在代码中可能会导致一些更难调试的错误。 根据 Python 方法,我无法检查类型。 那么我应该如何以正确的方式尝试呢?
def set_age(self, age):
try:
age = int(age)
except TypeError:
raise TypeError('First parameter must be of int type.')
self._age = age
或者只是
def set_age(self, age):
self._age = int(age)
并让 Python 自行引发错误。
我知道这可能是一些愚蠢的问题,我只是想确定一下。
【问题讨论】:
-
“稍后在代码中可能会导致一些更难调试的错误”——然后你必须修复 那个 代码。目前,您尝试在错误的地方解决问题。
-
它还没有解决,只是找到开始寻找的地方。在我的应用程序中,我有很多后来被打包成二进制格式的参数。当打包函数引发无法打包的错误时,它不会告诉我要打包的数据来自哪里,因为它是一个大数组,附加到代码中其他地方的数组。当我在打包之前发现类型错误异常时,我知道什么值不会打包。当我现在考虑它时,我应该在将其设置为对象之前验证值。但是验证器再次以某种方式进行类型检查,所以我不知道该怎么想
-
检查某物是否适合使用和类型检查之间存在巨大差异。在某些语言中它们是相同的东西,但在 Python 中它们是完全不同的。请注意,类型检查并非总是不好——它几乎是区分字符串和任意序列的唯一方法。然而,在大多数情况下,它是不必要的,而且弊大于利。
标签: python exception typechecking raise