How Can I Execute Same Code For A Condition In Try Block Without Repeating Code In Except Clause
Solution 1:
A simple way of doing this is to just modify the if statement to check that the candidate element isn't the last one, avoiding the need for a exception clause, and keeping the code short.
for n, i inenumerate(myList):
if n+1 != len(myList) and i == myList[n+1]:
#some codeelse:
#if they are not equal then do something#This block will also be exicuted when last element is reached
Solution 2:
for n inrange(1, len(myList))
if myList[n]==myList[n-1]:
#some codeelse:
#foo_bar()#foo_bar()
Solution 3:
Check out this(As Tom Ron suggested):
deffoobar():
#the code you want to execute in both casefor n inrange(len(myList)):
try:
if myList[n]==myList[n+1]:
#some codeelse:
foobar()
except IndexError:
foobar()
Solution 4:
The other answers are good for the specific case where you can avoid raising the exception in the first place. The more general case where the exception cannot be avoided can be handled a lambda function as follows:
deftest(expression, exception_list, on_exception):
try:
return expression()
except exception_list:
return on_exception
if test(lambda: some_function(data), SomeException, None) isNone:
report_error('Something happened')
The key point here is that making it a lambda defers evaluation of the expression that might raise an exception until inside the try/except block of the test()
function where it can be caught. test()
returns either the result of the evaluation, or, if an exception in exception_list
is raised, the on_exception
value.
This comes from an idea in the rejected PEP 463. lambda to the Rescue presents the same idea.
(I offered the same answer in response to this question, but I'm repeating it here because this isn't exactly a duplicate question.)
Post a Comment for "How Can I Execute Same Code For A Condition In Try Block Without Repeating Code In Except Clause"