如何使程序打印而不是提供错误信息?

问题描述:

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

+0

你的意思是判断而不是行列式?因为这将是bsquared - fourac,这就是你想要检查的值是否大于0. – Evert

+0

你当前检查的值是> = 0不是你取平方根的值,因此即使在检查,你的程序可能仍然试图取一个负值的平方根,导致错误。 – Evert

+0

你是对的XD,改变它 – PCK11800

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为好)

+0

为什么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: 

您正在使用三个不同的变量在不知不觉中。