在python中尝试除外:语法问题 class ShortInputException(异常): ''用户定义的异常类'' 定义初始值(自身,长度,至少): 例外情况。初始化(自我) self.length=长度 self.atleast=至少 尝试: s=原始输入('输入某物-->') 如果长度小于3: 引发短输入异常(len,3) 除ShortInputException外,x: print'ShortInputException:输入的长度为%d\ 应至少为%d%%(x.length,x.atleast)

在python中尝试除外:语法问题 class ShortInputException(异常): ''用户定义的异常类'' 定义初始值(自身,长度,至少): 例外情况。初始化(自我) self.length=长度 self.atleast=至少 尝试: s=原始输入('输入某物-->') 如果长度小于3: 引发短输入异常(len,3) 除ShortInputException外,x: print'ShortInputException:输入的长度为%d\ 应至少为%d%%(x.length,x.atleast),python,Python,我不懂这行的语法:除了ShortInputException,x: x在这里做什么?? 为什么它是作为一个对象 这条线有什么用异常。\uuuu初始化\uuuuuuuuu(自) 谢谢 捕获类ShortInputException的异常,并将异常对象的实例绑定到x 更常见的语法是 except ShortInputException, x: 如中所述,这是首选的。除非您需要支持Python 2.5,否则应该使用as版本 调用超类的构造函数,超类是此用户定义类派生自的类 这条线有什么用异常。\uu

我不懂这行的语法:
除了ShortInputException,x:

x在这里做什么?? 为什么它是作为一个对象

这条线有什么用<代码>异常。\uuuu初始化\uuuuuuuuu(自)

谢谢

捕获类ShortInputException的异常,并将异常对象的实例绑定到x

更常见的语法是

except ShortInputException, x:
如中所述,这是首选的。除非您需要支持Python 2.5,否则应该使用as版本


调用超类的构造函数,超类是此用户定义类派生自的类

这条线有什么用<代码>异常。\uuuu初始化\uuuuuuuuu(自)

ShortInputException(Exception)
将您的类
ShortInputException
声明为
Exception
的子类<代码>异常。uuu初始化(self)调用父类的构造函数

除了ShortInputException,x:

从:

当异常发生时,它可能有一个关联的值,也称为异常参数。参数的存在和类型取决于异常类型

exception子句可以在异常名称(或元组)之后指定变量。变量绑定到异常实例,其参数存储在instance.args中


x
在您的示例中,是引发的异常对象。

如果我错了,请告诉我。流程是这样的1。s=原始输入('输入某物-->'),如果len(s)<3:引发ShortInputException(len(s),3)2。除ShortInputException外,x:print'ShortInputException:输入的长度为%d,\n至少应为%d'(x.length,x.atleast),其中在类ShortInputException(Exception):之间出现???此答案恰好正确。正确就足以值得投一票;)您需要在
init
周围使用
\uuuuu
,即
\uuuu init\uuuu
。此外,它实际上并不是“更常见的语法”:在Python2.6(IIRC)中添加了
as
语法,在此之前,除了FooType之外,还使用了
,foo
语法。Python2仍然支持旧语法,但是如果您使用的是Python2.6,那么您应该更喜欢新语法。但是,如果您需要支持Python 2.5(可怜的您),那么您必须使用旧语法才能兼容。@thanatos谢谢。初始化是问题原始格式的复制/粘贴错误,我刚找到PEP3110,它描述了从旧逗号语法到新语法的变化。请注意,出于文档中概述的原因,最好执行
super(ShortInputException,self)。\uuuuu init(self)
而不是
Exception.\uuu init\uuuuself)
;但在您编写的代码中,结果是一样的。
except ShortInputException, x:
except ShortInputException as x
Exception.__init__(self)