我正在进入 Python 的世界,我有一个问题出现了,我一直在环顾四周,但我没有找到任何能说服我的东西,我希望在这里能够澄清这个困难的问题。
问题是关于 Python 中的异常以及之后如何抛出和捕获它们的主题。
我在 Java 中举了一个例子,我想知道如何在 Python 中完成它:
public void setEdad(int edad) {
if (edad <= 0)
throw new Exception("La edad debe ser positiva.");
this.edad = edad;
}
然后在分配一个值之前,我捕获它:
try {
Persona persona = new Persona();
persona.setEdad(-10);
} catch (Exception e) {
System.out.println(e.getMessage());
}
这是一个测试示例,显示我想要实现的目标。
我怎么能在 Python 中做到这一点并能够像在 java 中那样抛出异常?
问候和谢谢。
对于由于将无效参数传递给方法/函数或其子类而导致的此类异常,
ValueError
通常使用。最简单的是:我通常更喜欢为此创建一个自定义类,这为您提供了更多的自由和清晰的代码:
在
except
其中,您可以使用以下方法捕获所有异常,而不仅仅是自定义异常Exception
:您的问题已经得到了正确的答案。尽管问题是关于如何抛出异常以及如何拦截它们,但对于像您的示例这样的情况,最好使用"asserts":
如果不满足条件,则会引发
AssertionError
可以拦截的异常。但是,只有当您想修复错误并让程序继续运行时,捕获异常才有意义。如果是这种情况,最好进行修复并避免引发异常。使用断言的好处是当代码被优化时它们“消失”
-O
(参数)。您可以安全地使用它们来保护开发中的测试,而不必担心在将最终优化版本部署到生产环境时会减慢它的速度。您可以使用 抛出异常
raise
,如果您不知道,我还告诉过您,在 python 中,Java 的“getters”或“setters”方法不是必需的,显然是的,如果您需要对值进行验证,但无论如何它仍然是一个约定,在这方面没有语言限制,你可以一直这样做objeto.edad = -1
,这将是完全有效的。为了更接近 Java 的机制,使用装饰器@Property
和@Prop.setter