如何使程序打印而不是提供错误信息?
a = int(raw_input("A?"))
b = int(raw_input("B?"))
c = int(raw_input("C?"))
minusb = -b
bsquared = b**2
fourac = 4*a*c
twoa = 2*a
discriminant = bsquared + fourac
if discriminantt<0:
print "This quadratic have no real root."
elif determinant>=0:
answer1 = (minusb+((bsquared-fourac)**0.5))/twoa
answer2 = (minusb-((bsquared-fourac)**0.5))/twoa
print "X = %s and %s" % (answer1, answer2)
但是,当行列式小于0时,不是打印而是简单地运行一条错误消息,说answer1和answer2不能完成。如果判别式< 0,你如何使程序停止运行?如何使程序打印而不是提供错误信息?
PS:这是我只是试图练习我在网上学到的东西。很抱歉,如果我的代码是可怕的XD
Python的办法赶上是错误的是赶上异常使用try
/except
结构,而不是试图以防止发生错误。 例如: -
try:
answer1 = (minusb+((bsquared-fourac)**0.5))/twoa
answer2 = (minusb-((bsquared-fourac)**0.5))/twoa
print("X = %s and %s" % (answer1, answer2))
except ValueError as e:
print("oops: %s" % e)
异常将继承Exception
类,但在几乎所有情况下,你会想赶上特定的异常,如(在上例中)ValueError
类型的例外。 你可以很容易地得到例外的,你需要通过
- 赶上阅读文档类型
- 只是运行的代码(没有
except
条款),并读取错误信息:它会给异常的类型被提出。
您可以在异常处理程序中执行任何您认为合适的错误处理。例如如果它捕获错误下面将退出程序:
import sys
try:
answer1 = (minusb+((bsquared-fourac)**0.5))/twoa
answer2 = (minusb-((bsquared-fourac)**0.5))/twoa
print("X = %s and %s" % (answer1, answer2))
except ValueError as e:
print("oops: %s" % e)
sys.exit(1)
也print "foo"
没有在Python3(你应该通过各种手段使用)不再有效;使用print("foo")
代替(有效期在Python2为好)
为什么downvote?标题说“打印而不是错误”(问题说“停止而不是错误”) –
只需使用
import sys
sys.exit(1)
退出终止运行。 1
可以是你喜欢的任何数字。通常使用0
表示程序已成功执行,而1
表示发生错误。了解更多关于此这里How to exit from python
a = int(raw_input("A?"))
b = int(raw_input("B?"))
c = int(raw_input("C?"))
minusb = -b
bsquared = b**2
fourac = 4*a*c
twoa = 2*a
determinant = bsquared-fourac
if determinant<0:
print "This quadratic have no real root."
elif determinant>=0:
answer1 = (minusb+((bsquared-fourac)**0.5))/twoa
answer2 = (minusb-((bsquared-fourac)**0.5))/twoa
print "X = %s and %s" % (answer1, answer2)
对于二次discrimant = bsqaured-4 *根据其价值根基一个* C 是真实的还是虚构的
看看你的代码,你正在做一个愚蠢的错误由于你的代码不工作。
看看这三行代码:
discriminant = bsquared + fourac
if discriminantt<0:
elif determinant>=0:
您正在使用三个不同的变量在不知不觉中。
你的意思是判断而不是行列式?因为这将是bsquared - fourac,这就是你想要检查的值是否大于0. – Evert
你当前检查的值是> = 0不是你取平方根的值,因此即使在检查,你的程序可能仍然试图取一个负值的平方根,导致错误。 – Evert
你是对的XD,改变它 – PCK11800