Correct Python script structure

I’ve been programming in Python for some time now and I’ve always used the below structure to organize my code. Lately, I’ve been wondering if this structure is an ideal and correct one to use generally in Python, both in terms of it being Pythonic but also performance wise?

The structure I follow in my scripts is as below:

def main(argv):          """         Main entry for execution of the program         """         try:             call_func1()             call_func2()             call_func3()         except some_specific_exception_type1 as e:             do_something             raise         except some_specific_exception_type2 as e:             do_something             raise         except Exception as e: # catch all other exceptions that might occur             do_something             raise  def call_func1():         try:             do_something_in_here         except some_specific_exception_type1 as e:             do_something             raise         except some_specific_exception_type2 as e:             do_something             raise         except Exception as e: # catch all other exceptions that might occur             do_something             raise  def call_func2():         try:             do_something_else_in_here         except some_specific_exception_type1 as e:             do_something             raise         except some_specific_exception_type2 as e:             do_something             raise         except Exception as e: # catch all other exceptions that might occur             do_something             raise    if __name__ == '__main__':         main(sys.argv[1:]) 

As you can see, I have a central point in the script where the execution of the program starts(in this case is the main() method) and from there I call other methods that perform some type of actions.

Then each of the methods(whether it is the central starting point or the other methods that do a specific work) handle exceptions that might be thrown by the actions they perform and raise those.

This way, I have a central point where the execution of the program starts but also a central point where the execution will finish since all methods will return back to main() whether they succeed or throw an exception(since they will raise it).

I was wondering if implementing this kind of structure is a correct thing to do both in terms of it being Pythonic, or whether if it affects the performance of the program or if it is the right away to handle errors?

Thank you in advance!