On Thu, 10 Aug 2006 16:59:56 -0700, Farshid Lashkari wrote: > Chris wrote: >> But sometimes you can have too many of these statements in your >> program, and it starts to get tangled and nasty looking. Is there a way >> I can modify sys.error so that when the interpreter comes accross an >> IndexError it prints "That number is way too big!" before it exits? > > Hi, > > Try placing the try/except block around the main function of your program: > > if __name__ == '__main__': > try: > main() > except IndexError: > sys.exit("That number is way too big!")
That's broken. Imagine that somewhere in main() the following is called: D = {"a": "apple", "b": "bicycle", "c": "cat"} print D["aardvark"] Your code now prints "That number is way too big!". That's not good. try...except blocks should, as a general rule, cover only the smallest amount of code that they need to. One possible solution is to use a custom class: # untested class MyList(list): def __getitem__(self, i): if i >= len(self): raise IndexError("That index is too big!") super(list, self).__getitem__(i) Another is a helper function: def safe_getindex(somelist, i): if i >= len(somelist): raise IndexError("That index is too big!") return somelist[i] You can of course re-write them to use a try...except block instead of testing the index. -- Steven D'Aprano -- http://mail.python.org/mailman/listinfo/python-list