关于try catch:尝试在Python中除外,意外输出

Try and except in Python, unexpected output

编辑:更改条件..谢谢

我正在尝试学习try / exception。 我没有得到我应该的输出。 它通常是一杯或没有。 理想情况下,它应该是9或10。

说明:

创建一个NoCoffee类,然后编写一个名为make_coffee的函数,执行以下操作:使用随机模块以95%的概率通过打印消息创建一壶咖啡并正常返回。 有5%的几率,提高NoCoffee错误。

接下来,编写一个函数attempt_make_ten_pots,它使用try块和for循环来尝试通过调用make_coffee来生成10个pot。 函数attempt_make_ten_pots必须使用try块处理NoCoffee异常,并且应该为实际生成的pot数返回一个整数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import random

# First, a custom exception
class NoCoffee(Exception):
    def __init__(self):
        super(NoCoffee, self).__init__()
        self.msg ="There is no coffee!"

def make_coffee():
    try:
        if random.random() <= .95:
            print"A pot of coffee has been made"

    except NoCoffee as e:
        print e.msg

def attempt_make_ten_pots():
    cupsMade = 0

    try:
        for x in range(10):
            make_coffee()
            cupsMade += 1

    except:
        return cupsMade


print attempt_make_ten_pots()

  • 如果你想允许95%那么条件应该是

    1
    if random.random() <= .95:
  • 现在,为了让你的程序抛出一个错误并返回所做的咖啡数量,你需要在随机值大于.95时引发一个异常,它应该在attempt_make_ten_pots函数中排除,而不是在make_coffee本身。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    import random

    # First, a custom exception
    class NoCoffee(Exception):
        def __init__(self):
        super(NoCoffee, self).__init__()
        self.msg ="There is no coffee!"

    def make_coffee():
        if random.random() <= .95:
            print"A pot of coffee has been made"
        else:
            raise NoCoffee

    def attempt_make_ten_pots():
        cupsMade = 0
        try:
            for x in range(10):
                make_coffee()
                cupsMade += 1
        except NoCoffee as e:
            print e.msg
        return cupsMade

    print attempt_make_ten_pots()