关于django:在python try-except中可以有一个else块语句吗?

Can there be an else block statement in python try-except?

本问题已经有最佳答案,请猛点这里访问。

我正在尝试编写订阅列表模块。所以,我有一个声明,根据用户的电子邮件ID,可能会抛出一个超出范围的索引错误。如果是这样,我想让程序做点什么,如果不是,我想让程序完全做点别的。我该怎么办?目前,我有一些代码尝试添加所有用户,不管这些用户如何,都会导致程序崩溃。我理想中想要的是这样的:

1
2
3
4
5
6
7
8
try:
    check_for_email_id.from_database
except IndexError:
    create.user_id.in_database
    user.add.to.subscribe_list

else:
    user.add.to.subscribe_list

我需要在这里添加一个块,如果没有IndexError,省略"do something部分,做else部分。python是否提供了内置选项?我可以在try except语句中使用if else块吗?

另外,除了创建一个新的用户添加函数之外,还有什么好方法可以避免为user.add.to.subscribe_list编写两次代码?


是的,python try/except(else/finally)语句中的else正是为了:只有在没有异常的情况下,才希望发生这种情况:

1
2
3
4
5
6
7
8
9
10
import random
try:
    1 / random.randrange(2)
except Exception as e:
    print(e)
else:
    print('we succeeded!')
finally:
    # always prints
    print('we just tried to do some division!')

在回答第二个问题时,您真正想要的是使用finally条款:

1
2
3
4
5
6
7
try:
    check_for_email_id.from_database
except IndexError:
    create.user_id.in_database
finally:
    # this gets called if there was an error or not
    user.add.to.subscribe_list