在引发异常时获取指定的变量,python异常处理
我想找到一种方法,在出现异常之前获取我分配的变量。例如,如果代码是在引发异常时获取指定的变量,python异常处理,python,exception,Python,Exception,我想找到一种方法,在出现异常之前获取我分配的变量。例如,如果代码是 try: a=b c=d e=f except: bla bla 在“e=f”处生成了一个异常,我仍然想要a=b和c=d 可能吗?我意识到我可以做多次尝试陈述,但有什么我可以一步做的吗 try: a = "foo" c = "bar" e = unknown_function() except: pass print a, c # prints "foo bar" a和c都已设置,您只需在处
try:
a=b
c=d
e=f
except:
bla bla
在“e=f”处生成了一个异常,我仍然想要a=b和c=d
可能吗?我意识到我可以做多次尝试陈述,但有什么我可以一步做的吗
try:
a = "foo"
c = "bar"
e = unknown_function()
except:
pass
print a, c # prints "foo bar"
a
和c
都已设置,您只需在处理异常后使用它们的值即可<代码>e未设置为任何值,因为在执行该行时引发了异常
a
和c
都已设置,您只需在处理异常后使用它们的值即可<代码>e未设置为任何值,因为在执行该行时引发了异常
a
和c
都已设置,您只需在处理异常后使用它们的值即可<代码>e未设置为任何值,因为在执行该行时引发了异常
a
和c
都已设置,您只需在处理异常后使用它们的值即可<代码>e没有设置为任何值,因为在执行该行时引发了异常。是的,这是完全可能的。下面是一个演示:
>>> try:
... a = 1
... b = 2
... c = 1/0 # This will raise a ZeroDivisionError
... except ZeroDivisionError:
... print 'an error occurred'
...
an error occurred
>>> a # a still exists
1
>>> b # so does b
2
>>> c # only c is undefined
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'c' is not defined
>>>
>>试试:
... a=1
... b=2
... c=1/0#这将产生零分错误
... 除零误差外:
... 打印“发生错误”
...
发生了一个错误
>>>a#a仍然存在
1.
>>>b#b也是
2.
>>>只有c是未定义的
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
NameError:未定义名称“c”
>>>
设计用于在引发异常之前正常执行try块中的代码。发生这种情况时,try块将立即退出。这意味着只有引发异常的行之后的代码才会被忽略。是的,这是完全可能的。下面是一个演示:
>>> try:
... a = 1
... b = 2
... c = 1/0 # This will raise a ZeroDivisionError
... except ZeroDivisionError:
... print 'an error occurred'
...
an error occurred
>>> a # a still exists
1
>>> b # so does b
2
>>> c # only c is undefined
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'c' is not defined
>>>
>>试试:
... a=1
... b=2
... c=1/0#这将产生零分错误
... 除零误差外:
... 打印“发生错误”
...
发生了一个错误
>>>a#a仍然存在
1.
>>>b#b也是
2.
>>>只有c是未定义的
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
NameError:未定义名称“c”
>>>
设计用于在引发异常之前正常执行try块中的代码。发生这种情况时,try块将立即退出。这意味着只有引发异常的行之后的代码才会被忽略。是的,这是完全可能的。下面是一个演示:
>>> try:
... a = 1
... b = 2
... c = 1/0 # This will raise a ZeroDivisionError
... except ZeroDivisionError:
... print 'an error occurred'
...
an error occurred
>>> a # a still exists
1
>>> b # so does b
2
>>> c # only c is undefined
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'c' is not defined
>>>
>>试试:
... a=1
... b=2
... c=1/0#这将产生零分错误
... 除零误差外:
... 打印“发生错误”
...
发生了一个错误
>>>a#a仍然存在
1.
>>>b#b也是
2.
>>>只有c是未定义的
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
NameError:未定义名称“c”
>>>
设计用于在引发异常之前正常执行try块中的代码。发生这种情况时,try块将立即退出。这意味着只有引发异常的行之后的代码才会被忽略。是的,这是完全可能的。下面是一个演示:
>>> try:
... a = 1
... b = 2
... c = 1/0 # This will raise a ZeroDivisionError
... except ZeroDivisionError:
... print 'an error occurred'
...
an error occurred
>>> a # a still exists
1
>>> b # so does b
2
>>> c # only c is undefined
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'c' is not defined
>>>
>>试试:
... a=1
... b=2
... c=1/0#这将产生零分错误
... 除零误差外:
... 打印“发生错误”
...
发生了一个错误
>>>a#a仍然存在
1.
>>>b#b也是
2.
>>>只有c是未定义的
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
NameError:未定义名称“c”
>>>
设计用于在引发异常之前正常执行try块中的代码。发生这种情况时,try块将立即退出。这意味着只有引发异常的行之后的代码才会被忽略。如果我理解正确,默认情况下会发生这种情况。引发异常并不会神奇地撤消try块中已经发生的一切。在您的示例中,如果分配
e
时发生错误,a
和c
仍将具有分配的值
try:
a = b
c = d
e = f # oh noes! error! Try block skips to the end!
except: pass
print (a) #but a and c are still there
print (c)
如果我理解正确,这将默认发生。引发异常并不会神奇地撤消try块中已经发生的一切。在您的示例中,如果分配
e
时发生错误,a
和c
仍将具有分配的值
try:
a = b
c = d
e = f # oh noes! error! Try block skips to the end!
except: pass
print (a) #but a and c are still there
print (c)
如果我理解正确,这将默认发生。引发异常并不会神奇地撤消try块中已经发生的一切。在您的示例中,如果分配
e
时发生错误,a
和c
仍将具有分配的值
try:
a = b
c = d
e = f # oh noes! error! Try block skips to the end!
except: pass
print (a) #but a and c are still there
print (c)
如果我理解正确,这将默认发生。引发异常并不会神奇地撤消try块中已经发生的一切。在您的示例中,如果分配
e
时发生错误,a
和c
仍将具有分配的值
try:
a = b
c = d
e = f # oh noes! error! Try block skips to the end!
except: pass
print (a) #but a and c are still there
print (c)
这是一种直截了当的方法,没有太多麻烦。当您无法预测可能发生的错误类型或多个错误时,这是最好的解决方法
try :
a=10
except :
print "bla A"
try :
b=20
except:
print "bla B"
try:
c=d
except :
print "bla C"
这是一种直截了当的方法,没有太多麻烦。当您无法预测可能发生的错误类型或多个错误时,这是最好的解决方法
try :
a=10
except :
print "bla A"
try :
b=20
except:
print "bla B"
try:
c=d
except :
print "bla C"
这是一种直截了当的方法,没有太多麻烦。当您无法预测可能发生的错误类型或多个错误时,这是最好的解决方法
try :
a=10
except :
print "bla A"
try :
b=20
except:
print "bla B"
try:
c=d
except :
print "bla C"
这是一种直截了当的方法,没有太多麻烦。当您无法预测可能发生的错误类型或多个错误时,这是最好的解决方法
try :
a=10
except :
print "bla A"
try :
b=20
except:
print "bla B"
try:
c=d
except :
print "bla C"
最好是限制
try
块中表达式的数量。