我正在提出异常并尝试在代码段中处理异常。引发异常部分和处理异常部分在函数中完成。这样做是不对的?
import sys
def water_level(lev):
if(lev<10):
raise Exception("Invalid Level!")
print"New level=" # If exception not raised then print new level
lev=lev+10
print lev
try:
if(level<10):
print"Alarming situation has occurred."
except Exception:
sys.stdout.write('\a')
sys.stdout.flush()
else:
os.system('say "Liquid level ok"')
print"Enter the level of tank"
level=input()
water_level(level) #function call
输出不处理异常。有人能解释我为什么吗?
答案 0 :(得分:0)
最好只是在函数中引发异常,然后在调用函数时捕获它,这样你的函数就不会做太多而你的错误处理是独立的。它使您的代码更简单。
你的代码永远不会达到你的except
子句,因为如果水位太低会引发异常并跳出函数,如果可以,它就会到达else
子句。 print
子句中的try
语句也永远不会到达,因为它与引发异常的条件相同,并且跳出一个。
您的代码应该是这样的......
import sys
import os
def water_level(level):
#just raise exception in function here
if level < 10:
raise Exception("Invalid Level!")
level = level + 10
print("New level=") # If exception not raised then print new level
print(level)
#function call
print("Enter the level of tank")
#cast to int
level=int(input())
try:
#call function in here
water_level(level)
#catch risen exceptions
except Exception as e:
sys.stdout.write('\a')
sys.stdout.flush()
#print exception(verification)
print(e)
print("Alarming situation has occurred.")
else:
os.system('say "Liquid level ok"')
请注意,我更正了其他一些缺陷
import os
失踪input()
投射到一个号码,以便进行数字比较和添加Exception
,因为你也会捕获所有其他异常。(这就是为什么我添加了print(e)
) - &gt;考虑自定义例外