使用 If 语句检查是否出现错误
Using If Statements To Check If Something Raises An Error
我正在尝试编写一个程序来为我解决有关参数方程的问题。我正在尝试执行以下操作:
我正在尝试为参数方程找到 2 个答案。第一个答案将是正平方根。第二个答案将是负平方根。如果第一个平方根引发数学域错误,则不要找到第二个答案。这是我目前所拥有的:
def hitsGround(vertical_velocity, y_coordinate):
h = vertical_velocity/-16/-2
k = -16*(h)**2 + vertical_velocity*(h) + y_coordinate
time = float(input("At what height do you want me to solve for time?: "))
try:
hits_height1 = math.sqrt((time - k)/-16) + h
except ValueError:
print("It won't reach this height.")
else:
print(f"It will take {hits_height1} seconds to hit said height.")
try:
hits_height2 = -math.sqrt((time - k)/16) + h
except ValueError:
print("There is no second time it will reach this height.")
else:
print(f"It will take {hits_height2} seconds to hit said height.")
有没有什么方法可以使用 if 语句来检查第一个方程式是否会引发数学域错误,这样我就可以让它找不到第二个答案?谢谢!
您无法使用 if
测试 运行 时间异常;这正是 try-except
所做的。但是,当非法操作被如此直接定义时,您可以在尝试 sqrt
操作之前测试 that 条件:
if (time - k)/-16 < 0:
# no roots
else:
# proceed to find roots.
一般来说,使异常处理变得更容易的方法是在 except
内做所有你需要做的事情来处理异常。例如,如果您不想在遇到第一个异常后找到第二个答案,只需 return
:
try:
hits_height1 = math.sqrt((time - k)/-16) + h
except ValueError:
print("It won't reach this height.")
return
print(f"It will take {hits_height1} seconds to hit said height.")
如果你想让生活更轻松,只需允许引发异常(根本不捕获它),然后在调用函数中捕获它!
def hitsGround(vertical_velocity, y_coordinate):
h = vertical_velocity/-16/-2
k = -16*(h)**2 + vertical_velocity*(h) + y_coordinate
time = float(input("At what height do you want me to solve for time?: "))
hits_height1 = math.sqrt((time - k)/-16) + h
print(f"It will take {hits_height1} seconds to hit said height.")
hits_height2 = -math.sqrt((time - k)/16) + h
print(f"It will take {hits_height2} seconds to hit said height.")
try:
hitGround(1.0, 10.0)
except ValueError:
print("It won't reach that height again.")
无论在 hitsGround
中的什么地方引发异常,它都会立即停止该函数正在做的任何事情,并且它会命中调用范围中的 except
。这样你只需要一个 try/except
来涵盖这两种情况。
我正在尝试编写一个程序来为我解决有关参数方程的问题。我正在尝试执行以下操作:
我正在尝试为参数方程找到 2 个答案。第一个答案将是正平方根。第二个答案将是负平方根。如果第一个平方根引发数学域错误,则不要找到第二个答案。这是我目前所拥有的:
def hitsGround(vertical_velocity, y_coordinate):
h = vertical_velocity/-16/-2
k = -16*(h)**2 + vertical_velocity*(h) + y_coordinate
time = float(input("At what height do you want me to solve for time?: "))
try:
hits_height1 = math.sqrt((time - k)/-16) + h
except ValueError:
print("It won't reach this height.")
else:
print(f"It will take {hits_height1} seconds to hit said height.")
try:
hits_height2 = -math.sqrt((time - k)/16) + h
except ValueError:
print("There is no second time it will reach this height.")
else:
print(f"It will take {hits_height2} seconds to hit said height.")
有没有什么方法可以使用 if 语句来检查第一个方程式是否会引发数学域错误,这样我就可以让它找不到第二个答案?谢谢!
您无法使用 if
测试 运行 时间异常;这正是 try-except
所做的。但是,当非法操作被如此直接定义时,您可以在尝试 sqrt
操作之前测试 that 条件:
if (time - k)/-16 < 0:
# no roots
else:
# proceed to find roots.
一般来说,使异常处理变得更容易的方法是在 except
内做所有你需要做的事情来处理异常。例如,如果您不想在遇到第一个异常后找到第二个答案,只需 return
:
try:
hits_height1 = math.sqrt((time - k)/-16) + h
except ValueError:
print("It won't reach this height.")
return
print(f"It will take {hits_height1} seconds to hit said height.")
如果你想让生活更轻松,只需允许引发异常(根本不捕获它),然后在调用函数中捕获它!
def hitsGround(vertical_velocity, y_coordinate):
h = vertical_velocity/-16/-2
k = -16*(h)**2 + vertical_velocity*(h) + y_coordinate
time = float(input("At what height do you want me to solve for time?: "))
hits_height1 = math.sqrt((time - k)/-16) + h
print(f"It will take {hits_height1} seconds to hit said height.")
hits_height2 = -math.sqrt((time - k)/16) + h
print(f"It will take {hits_height2} seconds to hit said height.")
try:
hitGround(1.0, 10.0)
except ValueError:
print("It won't reach that height again.")
无论在 hitsGround
中的什么地方引发异常,它都会立即停止该函数正在做的任何事情,并且它会命中调用范围中的 except
。这样你只需要一个 try/except
来涵盖这两种情况。