def debug(command, my_arg, my_locals):
global stepping
global breakpoints
if command.find(' ') > 0:
arg = command.split(' ')[1]
else:
arg = None
if command.startswith('s'):
stepping = True
return True
def traceit(frame, event, arg):
global stepping
global breakpoints
if event == 'Line':
if stepping or breaking.has_key(frame.f_lineno):
resume = False
while not resume:
print event, frame.f_lineno, frame.f_code.co_name, frame.f_locals
command = input_command()
resume = debug(command, arg, frame.f_locals)
return traceit
Assertions is the most powerful debugging tool, automating debugging tool.
def test_square_root():
assert square_root(4) == 2
assert square_root(g) == 3
# and so on
import math
def square_root(x):
assert x >= 0
y = math.sqrt(x)
assert y * y == x
return y
testing square root
import math
random
def square_root(x):
assert x >= 0
y = math.sqrt(x)
assert y * y == x
return y
for i in range(1, 1000):
r = random.random() * 10000
try:
z = square_root(r)
except:
print r, math.sqrt(r) * math.sqrt(r)
break
print "Done!"
import math
import random
def square_root(x, eps=10e-7):
assert x >= 0
y = math.sqrt(x)
assert abs(y * y - x) < eps
return y
for i in range(1, 1000):
r = random.random() * 1000
z = square_root(r)
print "Done!"
class Time:
def __init__(self, h = 0, m = 0, s = 0):
self._hours = h
self._minutes = m
self._seconds = s
def hours(self):
return self._hours
def minutes(self):
return self._minutes
def seconds(self):
return self._seconds
def __repr__(self):
return "{:2d}{:2d}{:2d}".format(
self.hours(), self.minutes(), self.seconds())
t = Time(13, 0, 0)
print t