while True:
try:
2/0
except Exception as e:
break
print e
给出:整数除法或以零为模
我认为e
的范围在while
块内,并且在外部print
语句中无法访问。我错过了什么?
答案 0 :(得分:5)
简单:while
不会在Python中创建范围。 Python只有以下范围:
因此,当您离开while
循环时,e
,作为局部变量(如果循环在函数中)或全局变量(如果不是),仍然可用。
tl; dr:Python不是C。
答案 1 :(得分:0)
我刚遇到类似的情况。例外中的MyTable
的行为不符合预期:
as
这将导致以下输出。 #!/usr/bin/python3.6
exc = 'foofoo'
print('exc in locals?', 'exc' in locals())
try:
x = 1 / 0
except Exception as exc:
print('exc in locals?', 'exc' in locals())
print('Error', exc)
print('exc in locals?', 'exc' in locals())
print('Sorry, got an exception', exc)
表示NameError
中不再包含exc
。
locals()
% ./g.py
exc in locals? True
exc in locals? True
Error division by zero
exc in locals? False
Traceback (most recent call last):
File "./g.py", line 11, in <module>
print('Sorry, got an exception', exc)
NameError: name 'exc' is not defined
%
从范围中删除了变量。尚未找到有关此问题的解释。这段代码产生预期的输出:
as ex
这解释了观察到的行为:Python 3 try statement
答案 2 :(得分:0)
在viewpager
中,当跳出except ... as e
时,e
将会被丢弃,无论是否定义过。
使用异常作为目标分配了异常后,该异常将在except子句的末尾清除。
请参阅官方网站链接: https://docs.python.org/3/reference/compound_stmts.html#the-try-statement