我可以在同一个函数中引发和处理异常

时间:2016-07-15 18:54:36

标签: custom-exceptions

我正在提出异常并尝试在代码段中处理异常。引发异常部分和处理异常部分在函数中完成。这样做是不对的?

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 

输出不处理异常。有人能解释我为什么吗?

1 个答案:

答案 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;考虑自定义例外