0

Explanation of the output

#Someone can explain me the output of this code? def s(x): try: print("Hello") print(1 / x) except ZeroDivisionError: print("Divided by zero") return s(x+1) finally: print("This code will run no matter what") print(s(0)) #output: #Hello #Divided by zero #Hello #1.0 # This code will run no matter what #This code will run no matter what #None

9th Dec 2018, 12:44 PM
Dawid Pado
Dawid Pado - avatar
5 Respostas
+ 5
Alright, let's see. The last line says print(s(0)), so first s() will be be called with the argument 0, and the return value will be printed. We'll come back to the return value later. s(0) starts with printing Hello. Then print(1/0) causes ZeroDivisionError, so we jump to the except block and print Divided by zero. Now we have a return s(x+1), so s() is called again with argument 1 (=0+1). But wait! The finally clause is ALWAYS executed before leaving a try statement, even "on the way out" (Reference: https://docs.python.org/3/tutorial/errors.html#defining-clean-up-actions ). So the code first prints the "This code will..." part and then deals with the return. Now for s(1), we print Hello and then also 1/x, which evaluates as 1.0. No exception is raised, and we again deal with the print statement in the finally block. Now the function call is complete, and since there's no explicit return value any more, the final return value of s(0) is the default, which is None. So None is printed.
9th Dec 2018, 1:09 PM
Kishalaya Saha
Kishalaya Saha - avatar
+ 3
You call s with 0 as the argument Then you enter the try statement, at first it prints out hello and then you want to print 1 / x. You gave x 0 so you do 1 / 0. This raises a ZeroDivisonError so you go to the except statement. Here you print divided by zero and you return s with x + 1 or 1. After that you go into the finally statement and you print this code will run no matter what
9th Dec 2018, 1:02 PM
Julian
Julian - avatar
+ 3
David Pado no problem!!
9th Dec 2018, 1:05 PM
Julian
Julian - avatar
+ 2
Okok all clear, thanks 👍💪
9th Dec 2018, 1:14 PM
Dawid Pado
Dawid Pado - avatar
+ 1
Thanks
9th Dec 2018, 1:05 PM
Dawid Pado
Dawid Pado - avatar