Ganesh Pal <ganesh1...@gmail.com> writes: > I m on python 2.7 and Linux , I have a simple code need suggestion if I > I could replace sys.exit(1) with raise SystemExit .
No, but you can replace:: sys.exit(1) with:: raise SystemExit(1) As you know from reading the ‘sys.exit’ documentation <URL:https://docs.python.org/3/library/sys.html#sys.exit>, ‘sys.exit’ is implemented by performing ‘raise SystemExit(exit_status)’. So those do virtually the same thing. > ==Actual code== > > def main(): > try: > create_logdir() > create_dataset() > unittest.main() > except Exception as e: > logging.exception(e) > sys.exit(EXIT_STATUS_ERROR) > > if __name__ == '__main__': > main() This is good practice, putting the mainline code into a ‘main’ function, and keeping the ‘if __name__ == '__main__'’ block small and obvious. What I prefer to do is to make the ‘main’ function accept the command-line arguments, and return the exit status for the program:: def main(argv): exit_status = EXIT_STATUS_SUCCESS try: parse_command_line(argv) setup_program() run_program() except SystemExit as exc: exit_status = exc.code except Exception as exc: logging.exception(exc) exit_status = EXIT_STATUS_ERROR return exit_status if __name__ == '__main__': exit_status = main(sys.argv) sys.exit(exit_status) That way, the ‘main’ function is testable like any other function: specify the command line arguments, and receive the exit status. But the rest of the code doesn't need to know that's happening. -- \ “Programs must be written for people to read, and only | `\ incidentally for machines to execute.” —Abelson & Sussman, | _o__) _Structure and Interpretation of Computer Programs_ | Ben Finney -- https://mail.python.org/mailman/listinfo/python-list