4 + spam*3 a = 10 b = 0 c = a / b def division(): for n in range(0, 5): print 10.0 / n division() '2' + 2 l = [1, 2] print l[2] d = {"a": 1, "b": 2} print d['c'] a = open('aaa.txt') try: print 1.0 / 0.0 except ZeroDivisionError: print 'zero division error!!!' def division(): for n in range(0, 5): try: print 10.0 / n except ZeroDivisionError, msg: print msg division() def division(): for n in range(0, 5): try: print 10.0 / n else: print "Success" division() name = 'aaa.txt' try: f = open(name, 'r') except IOError: print 'cannot open', name else: print name, 'has', len(f.readline()), 'lines' f.close() try: spam() except NameError, msg: print 'Error - ', msg try: spam() except NameError as msg: print 'Error - ', msg def zero_division(): x = 1 / 0 try: zero_division() except ZeroDivisionError, msg: print 'zero division error!!! - ', msg def zero_division(): x = 1 / 0 try: zero_division() except ZeroDivisionError as msg: print 'zero division error!!! - ', msg try: spam() print 1.0 / 0.0 except: print 'Error' b = 0.0 name = 'aaa.txt' try: print 1.0 / b spam() f = open(name, 'r') '2' + 2 except NameError: print 'NameError !!!' except ZeroDivisionError: print 'ZeroDivisionError !!!' except (TypeError, IOError): print 'TypeError or IOError !!!' else: print 'No Exception !!!' finally: print 'Exit !!!' import os print os.getcwd() filename = 't.txt' try: f = open(filename, 'r') except IOError, msg: print msg else: a = float(f.readline()) try: answer = 1.0 / a except ZeroDivisionError, msg: print msg else: print answer finally: print "Finally!!!" f.close() def dosomething(): a = 1/0 try: dosomething() except ArithmeticError: print "ArithmeticException occured" def dosomething(): a = 1/0 try: dosomething() except ZeroDivisionError: # ZeroDivisionError는 이곳에서 잡힌다. print "ZeroDivisionError occured" except ArithmeticError: # FloatingPointError, OverflowError는 이곳에서 잡힌다. print "ArithmeticException occured" def dosomething(): a = 1/0 try: dosomething() except ArithmeticError: print "ArithmeticException occured" except ZeroDivisionError: # 이곳에서 ZeroDivisionError는 잡히지 않는다. ==> 잘못된 코드 print "ZeroDivisionError occured" for e in dir(__builtin__): if e.endswith('Error') or e.endswith('Warning'): print e class SquareSeq: def __init__(self, n): self.n = n def __getitem__(self, k): if k >= self.n or k < 0 : raise IndexError # 첨자 범위를 벗어나면 IndexError 예외를 발생시킴 return k * k def __len__(self): return self.n s = SquareSeq(10) print s[2], s[4] for x in s: # IndexError가 발생하는 시점까지 반복한다 print x, print s[20] # 첨자 범위가 넘었다 class Big(Exception): pass class Small(Big): pass def dosomething1(): x = Big() raise x def dosomething2(): raise Small() for f in (dosomething1, dosomething2): try: f() except Big: print "Big Exception = ", Big class MessageClass: def __init__(self, message, dur): self.message = message self.duration = dur def f(): raise Exception, 'message' try: f() except Exception, a: print a #에러발생 raise NameError raise NameError('이름 예외') a = 10 b = 0 try: if b == 0: raise ArithmeticError('0으로 나누고 있습니다.') a / b except ArithmeticError, v: print v a = 10 b = 0 try: if b == 0: raise ArithmeticError('0으로 나누고 있습니다.') a / b except ArithmeticError as e: print e # assert_test.py a = 30 margin = 2 * 0.2 assert margin > 10, 'not enough margin %s' % margin print a # assert의 조건식이 거짓이 되어 print a는 수행되지 않는다. a = 30 margin = 2 * 0.2 try: assert margin > 10, 'not enough margin %s' % margin except AssertionError, msg: print msg a = 30 margin = 2 * 0.2 if __debug__: assert margin > 10, 'not enough margin %s' % margin