所以基本上,if-else耦合的else块只在if条件不满足时才工作,所以它是有必要的。 在for-else耦合和while-else耦合中,当循环由于某种原因无法执行时,它就会执行。 因此,在try-except-else耦合中不使用else是无法完成的。 我的意思是,如果原因是检测是否没有引发异常,我们可以简单地在try块的末尾放一个print语句来实现它。 在try-except-else耦合中,else的关键作用是什么? (大家好!我对编程和StackOverflow也很陌生。但我已经尽量让这个问题与网站的礼仪同步。)
对于else,在python中没有耦合这样的东西。 上面提到的所有构造与else相结合都可以很好地工作,甚至不需要使用else。 您可以使用if
,for
,while
和try-except
,而不使用else
。 但是,else
在python中的作用是:执行代码,而不是上面方块中的代码。
请注意,在else
上面是什么块或者它与谁耦合是与它无关的。 只有在上面的块不是的情况下才会执行。 而由此产生的阻滞可能是重要的,也可能不是重要的,或者是其他手段无法实现的。
因此,在try-except-else耦合中不使用else是无法完成的。
考虑
try:
a()
except Exception:
b()
else:
c()
A。
try:
a()
c()
except Exception:
b()
但如果C()
引发exception
,则会捕获并运行B()
。 我相信这大概就是你在想的。
B。
try:
a()
except Exception:
b()
c()
但当A()
引发异常
时,可能会运行C()
。
C。
success = False
try:
a()
success = True
except Exception:
b()
if success:
c()
这在功能上是等价的,但更冗长,更不清晰。 (我们甚至还没有包含finally
块。)
try-except-else-finally对于控制捕获错误的范围相当有帮助。
如果在try
块中没有发现错误,也会执行else
块,但是当缓存错误时,只会执行except块。
因此,如果您有一个方法可以抛出IOError
,并且您希望捕获它引发的异常,但是如果try块中的代码第一个操作成功,并且您不希望从该操作中捕获IOError
,那么在这种情况下,将使用else
块。
try:
statements # statements that can raise exceptions
except:
statements # statements that will be executed to handle exceptions
else:
statements # statements that will be executed if there is no exception
请考虑以下示例:
try:
age=int(input('Enter your age: '))
except:
print ('You have entered an invalid value.')
else:
if age <= 21:
print('You are not allowed to enter, you are too young.')
else:
print('Welcome, you are old enough.')
虽然使用else
没有什么意义,因为每次没有异常时,我们也可以在try
块中执行任务。
希望这有用!