python try-except 中能有else 块语句吗?

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

我正在尝试编写一个订阅列表模块。因此,我有一个声明可能会根据用户的电子邮件 ID 抛出索引超出范围错误。如果是这样,我希望程序做一些事情,如果不是,我希望程序完全做其他事情。我该怎么做?目前我有代码试图添加所有用户而不考虑并使程序崩溃。我理想中想要的是这样的:

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 编写代码两次的好方法是什么?除了创建一个新的 user_add 函数?

是的,python try/except(else/finally) 语句中的 else 恰恰是为了:您希望发生的事情 如果没有例外:

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 子句:

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