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_ioerror
,except
会发现第二个电话的错误。如果你把它放在try
块,它将始终运行,直到finally
..这个else
让你确保
- 第二个操作只有在没有例外的情况下才能运行,
- 它会在
布洛克finally
- 任何
它不会在这里被抓到IOError
森栏
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
添加回答
举报
0/150
提交
取消