【问题标题】:random.choice and raise in python3 [closed]python3中的random.choice和raise [关闭]
【发布时间】:2019-03-19 08:02:51
【问题描述】:

我需要编写一个随机抛出三个异常之一的函数: ValueError、TypeError 或 RuntimeError。代替函数调用,处理所有三个异常。 我是如何理解的,我需要“提高”一个例外,但我不明白“提高”如何与“random.choice”一起使用。你能帮助我吗?谢谢你的回答。

def function1 ():
    try:
        import random
        raise random.choiсe([ValueError('Error1'), TypeError('Error2'), RuntimeError('Error3')])
    except ValueError:
        print ('Wrong Value!')
    except TypeError:
        print ('Wrong Type!')
    except RuntimeError:
        print ('Runtime Error!')

【问题讨论】:

  • 如果你运行你的代码会发生什么?
  • 你不明白的地方需要更具体。

标签: python python-3.x exception


【解决方案1】:

我明白你想要完成什么。您的代码的问题是您提出了所有三个错误,而您只想随机提出一个错误。这是一种方法:

errors = [
    (ValueError, 'Error1'),
    (TypeError, 'Error2'),
    (RuntimeError, 'Error3')
]
error, message = random.choice(errors)

try:
    raise error(message)

注意事项

  • errors 是一个元组列表,每个元组表示一个错误和一个消息
  • random.choice() 调用然后选择这些错误和消息之一
  • 现在,问题是提出该错误

【讨论】:

  • 不,提问者的代码创建了三个异常对象,但只引发了一个。
  • @HaiVu 谢谢!现在我明白它是如何工作的了。
【解决方案2】:

尽我所能解释,您可以使用int(choice(lst)) 并从'a'(ValueError), [1, 2, 3](TypeError) 中选择随机抛出前两个错误,然后您可以使用raise 您的RuntimeError

from random import choice
lst = ['a', [1, 2, 3]]

def handler(x):
    try:
        a = int(choice(lst))
    except TypeError:
        print('Type Error')
    except ValueError:
        print('Value Error')
    raise RuntimeError('Runtime Error')

handler(lst)
Value Error
Traceback (most recent call last):
  File "vash.py", line 13, in <module>
    handler(lst)
  File "vash.py", line 11, in handler
    raise RuntimeError('Runtime Error')
RuntimeError: Runtime Error

【讨论】:

    猜你喜欢
    • 2020-03-03
    • 2017-03-01
    • 2018-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多