为了账号安全,请及时绑定邮箱和手机立即绑定

Python尝试-否则

Python尝试-否则

慕尼黑8549860 2019-07-22 10:32:18
Python尝试-否则选项的预期用途是什么?else的条款try口供?
查看完整描述

3 回答

?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

的声明else如果执行从try-如果没有例外的话。老实说,我从来没有发现需要。

然而,处理异常注:

使用ASER子句比向try子句添加额外代码更好,因为它避免意外捕获未被try保护的代码引发的异常.除了陈述。

因此,如果您有一个方法,例如,可以抛出IOError,您希望捕获它引发的异常,但是如果第一个操作成功了,您还需要做一些其他的事情,而您要从该操作中捕获ioError,可以编写如下内容:

try:
    operation_that_can_throw_ioerror()except IOError:
    handle_the_exception_somehow()else:
    # we don't want to catch the IOError if it's raised
    another_operation_that_can_throw_ioerror()finally:
    something_we_always_need_to_do()

如果你把another_operation_that_can_throw_ioerror()operation_that_can_throw_ioerrorexcept会发现第二个电话的错误。如果你把它放在try块,它将始终运行,直到finally..这个else让你确保

  1. 第二个操作只有在没有例外的情况下才能运行,
  2. 它会在

    finally

    布洛克
  3. 任何

    IOError

    它不会在这里被抓到


查看完整回答
反对 回复 2019-07-22
?
森栏

TA贡献1810条经验 获得超5个赞

有一个大的使用理由else-风格和可读性。通常,将可能导致异常的代码保存在处理它们的代码附近是一个好主意。例如,比较以下几个方面:

try:
    from EasyDialogs import AskPassword
    # 20 other lines
    getpass = AskPasswordexcept ImportError:
    getpass = default_getpass

try:
    from EasyDialogs import AskPasswordexcept ImportError:
    getpass = default_getpasselse:
    # 20 other lines
    getpass = AskPassword

第二个是好的,当except不能提前返回,或者重新抛出异常。如果可能的话,我会写:

try:
    from EasyDialogs import AskPasswordexcept ImportError:
    getpass = default_getpass    return False  # or throw Exception('something more descriptive')# 20 other linesgetpass = AskPassword


查看完整回答
反对 回复 2019-07-22
  • 3 回答
  • 0 关注
  • 683 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信