gpt4 book ai didi

python - 当比较不同的数据类型时,我可以让 Python 抛出异常吗?

转载 作者:太空狗 更新时间:2023-10-30 00:51:04 24 4
gpt4 key购买 nike

假设我想比较 2 个具有不同数据类型的变量:string 和 int。我已经在 Python 2.7.3 和 Python 3.2.3 中测试过它,但都没有抛出异常。比较的结果是 False。在这种情况下,我可以使用不同的选项配置或运行 Python 以抛出异常吗?

ks@ks-P35-DS3P:~$ python2
Python 2.7.3 (default, Aug 1 2012, 05:14:39)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> a="123"
>>> b=123
>>> a==b
False
>>>
ks@ks-P35-DS3P:~$ python3
Python 3.2.3 (default, Apr 12 2012, 19:08:59)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> a="123"
>>> b=123
>>> a==b
False
>>>
ks@ks-P35-DS3P:~$

最佳答案

不,你不能。这些项目只是不相等,那里没有错误。

一般来说,强制您的代码只接受特定类型是非pythonic。如果您想创建 int 的子类,并让它在任何 int 工作的地方工作怎么办? Python bool 类型是 int 的子类,例如 (True == 1, False == 0).

如果你必须有一个异常(exception),你可以做两件事之一:

  1. 测试它们的类型是否相等并自己引发异常:

    if not isinstance(a, type(b)) and not isinstance(b, type(a)):
    raise TypeError('Not the same type')
    if a == b:
    # ...

    此示例允许 a 或 b 成为其他类型的子类,您需要根据需要缩小范围(type(a) is type(b) 为 super严格)。

  2. 尝试订购类型:

    if not a < b and not a > b:
    # ...

    在 Python 3 中,当比较数值类型和序列类型(例如字符串)时,这会抛出异常。比较在 Python 2 中成功。

    Python 3 演示:

    >>> a, b = 1, '1'
    >>> not a < b and not a > b
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    TypeError: unorderable types: int() < str()
    >>> a, b = 1, 1
    >>> not a < b and not a > b
    True

关于python - 当比较不同的数据类型时,我可以让 Python 抛出异常吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15451472/

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