这段代码表现得非常奇怪。我基本上复制了try
/ except
块格式我在其他代码中使用的格式,因为它在另一个代码中运行良好。但是,在这一部分中,我得到了追溯和的异常消息,我无法解释。
def input_rows_columns():
try:
print("How many rows do you want?")
rows = int(input("Rows: "))
print("How many columns do you want?")
columns = int(input("Columns: "))
except ValueError:
print("\nPlease insert numbers here\n")
if rows <= 0 or columns <= 0:
raise ValueError("\nPlease use numbers greater than zero here\n")
return rows, columns
def main():
print("This program will make a barn for you")
rows, columns = input_rows_columns()
print(rows)
print(columns)
if __name__ == '__main__':
main()
Here is an image of the traceback when you input zero:
Here is an image of the traceback when you input a string:
很抱歉,如果有更好的方法来追溯,这是我能想到的最好的
也许值得一提的是,当他在try
中调用该函数时,第一个程序(我复制格式的程序)有另一个except
/ main()
:
def main():
print("This program will calculate the volume of a rectangular box given \
its lenght, width, and height.\n")
success = False
try:
# get_dimensions() has similar structure as the input_rows_columns() from the program above
lenght, width, height = get_dimensions('Length', 'Width', 'Height')
success = True
except ValueError as e:
print(e)
except KeyboardInterrupt:
print("\nGoodbye.")
# success = True ficou implícito
if success:
volume = lenght * width * height
print("\nThe volume of the box is %.2f." % volume)
if __name__ == "__main__":
main()
然而,当我将这个概念引入上层程序时,它并没有解决问题。
答案 0 :(得分:0)
这与捕获错误与抛出(引发)的位置有关。
如果您没有raise
您捕获的ValueError,则代码会继续沿着实际未定义行的路径继续。
你在哪里:
int(input("Rows: "))
...此代码在rows
被分配之前执行,因此如果这样做会引发ValueError
,它会冒泡到您的except ValueError
行。现在您处于未分配rows
的状态。
如果您想在此错误被触发后停止该程序,您只需raise
或致电sys.exit()
except ValueError:
print("\nPlease insert numbers here\n")
raise