【问题标题】:Python, type checking and exceptionsPython,类型检查和异常
【发布时间】:2015-09-29 13:14:49
【问题描述】:

我必须检查某个变量的内容是否属于某种特定类型(这是我想要实现的健全性检查)。如果其中每一个都不是指定的类型,则程序必须中止。

我在 python 方面没有经验,我浏览了网络上的官方指南,其中声明可以通过类实现定义自己的异常。我不知道这是否会很难,但由于我不必做特别复杂的事情,是否可以以简单的方式做到这一点?

更新

我已经通过以下方式实现了异常 int 异常:

class TypeCheckingException(Exception):
    def __init__(self,type_in,type_exp):
        self.type_in = type_in
        self.type_exp = type_exp

其使用的具体实现行是:

try:
        if isinstance(var1,str) == 0:
            raise TypeCheckingException(type(var1),str)
        if isinstance(var2,str) == 0:
            raise TypeCheckingException(type(var2),str)
        if isinstance(var3,int) == 0:
            raise TypeCheckingException(type(var3),int)
        if isinstance(var4,int) == 0:
            raise TypeCheckingException(type(var4),int)
        if isinstance(var5,str) == 0:
            raise TypeCheckingException(type(var5),str)
        if isinstance(var6,float) == 0:
            raise TypeCheckingException(type(var6),float)
    except TypeCheckingException, tce:
        print "Type expected input " + str(tce.type_in) + " while type expected is " + str(tce.type_exp) +  "."

在这种情况下有效,但错误输出非常冗长......我想让它更短......

有什么线索吗?

【问题讨论】:

  • class MyOwnException(Exception): pass - 这是自定义异常的实现。你现在可以raise那个。这就是你的困惑吗?你到底有什么问题?
  • 问题是我有一组变量,由内部计算派生(所以我不将它们作为参数传递),因为程序很大,我想在结束时检查它们计算以确保它们是预期的类型。如果此类变量不是预期的类型,则程序必须中止(可能有一个异常指出问题所在)。
  • Sooooo....if not isinstance(foo, bar): raise MyOwnException()...!?再说一次,你的实际挂断是什么?
  • 我需要一个明确的例子来说明这种异常的实现。

标签: python exception types


【解决方案1】:

你想使用 isinstance(variable, type)。

>>> a = 'str'
>>> isinstance(a, str)
True

您不需要对这条路线使用异常处理。您可以检查实例类型,然后在必要时退出。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-14
    相关资源
    最近更新 更多