如何在python中创建用户定义的异常?

2024-10-02 00:26:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我想引发多个用户定义的异常

例如—

  • 如果传递给函数raiseParameterException的参数无效

  • 在无效的情况下,会引发CertainExceptions等等

我如何在Python中执行类似的操作


Tags: 函数用户参数定义情况raiseparameterexceptioncertainexceptions
2条回答
考虑下面的程序。

方案1:

# this program would keep prompting the user for an integer input.
while True:
    a=int(input("Enter integer: "))
    b=int(input("Enter another integer: "))
    print(a/b)

运行程序并保持输入。如果一切正常,它将打印两个整数的除法。现在 案例1:如果您输入一个随机字符串会怎么样? 案例2:或者如果在b变量的位置输入0呢

请随意测试它。你会看到, i) 案例1引发ValueError异常 ii)案例2引发了零错误异常

现在,您需要处理这些异常。你怎么能做到?以下是方法:

方案2:

# this program handles ValueError and ZeroDivisionError exceptions
while True:
    try:
        a=int(input("Enter integer: "))
        b=int(input("Enter another integer: "))
        result=a/b
    except ValueError:
        print("Input is not integer.")
    except ZeroDivisionError:
        print("Division by 0 is not supported.")
    else:
        print(result)

    print("\n")

此外,您可以像这样处理所有异常:

方案3:

while True:
    try:
        a=int(input("Enter integer: "))
        b=int(input("Enter another integer: "))
        result=a/b
    except Exception:
        print("An error occured.")
    else:
        print(result)

    print("\n")

如果出现用户定义的异常,请执行以下操作:

class MyException(Exception):
    pass

while True:
    a=int(input("Enter integer: "))
    b=int(input("Enter another integer: "))
    if b==0:
        raise MyException

    print("\n")

以后想抓就抓

程序3不是一个好的实践。永远不要默默地传递错误。您可以通过子类化python的异常类来利用它


class SomeException(Exception):
    pass

try:
    print('zzz')
    raise SomeException
except ValueError as ve:
    print('a')
except SomeException as se:
    print('b')
except:
    print("c")

# print
zzz
b

相关问题 更多 >

    热门问题