From cd9bc2dd75f6a42d5bb1c9bd20925fa5cc639f44 Mon Sep 17 00:00:00 2001 From: tmeissner Date: Wed, 8 Oct 2014 00:45:15 +0200 Subject: [PATCH] added error handling for: invalid filename (empty string), file save error, delete error; back() & forward() now safe in range of 0 .. characters list length; some minor refactoring --- python_3_oop/chapter05/editor.py | 42 +++++++++++++++++++++++--------- 1 file changed, 31 insertions(+), 11 deletions(-) diff --git a/python_3_oop/chapter05/editor.py b/python_3_oop/chapter05/editor.py index 8d0472a..19e3507 100644 --- a/python_3_oop/chapter05/editor.py +++ b/python_3_oop/chapter05/editor.py @@ -1,9 +1,12 @@ class Document: - def __init__(self): + def __init__(self, filename): self.characters = [] self.cursor = Cursor(self) - self.filename = "" + if len(filename) == 0: + raise FileNameInvalid("Invalid filename") + else: + self.filename = filename def insert(self, character): if not hasattr(character, 'character'): @@ -12,12 +15,18 @@ class Document: self.cursor.forward() def delete(self): - del self.characters[self.cursor.position] + try: + del self.characters[self.cursor.position] + except IndexError: + print("No character to delete") def save(self): - f = open(self.filename, "w") - f.write("".join(self.characters)) - f.close() + try: + f = open(self.filename, "w") + f.write(self.string) + f.close() + except IOError: + print("Could not safe file") @property def string(self): @@ -31,14 +40,16 @@ class Cursor: self.position = 0 def forward(self): - self.position += 1 + if self.position < len(self.document.characters): + self.position += 1 def back(self): - self.position -= 1 + if self.position > 0: + self.position -= 1 def home(self): while self.document.characters[self.position - 1].character != "\n": - self.position -= 1 + self.back() if self.position == 0: # got to beginning of file before newline break @@ -46,12 +57,14 @@ class Cursor: def end(self): while (self.position < len(self.document.characters) and self.document.characters[self.position].character != "\n"): - self.position += 1 + self.forward() + class Character: def __init__(self, character, bold=False, italic=False, underline=False): - assert len(character) == 1 + if len(character) != 1: + raise CharacterLength("Please insert a single character") self.character = character self.bold = bold self.italic = italic @@ -63,3 +76,10 @@ class Character: underline = "_" if self.underline else '' return bold + italic + underline + self.character + +class FileNameInvalid(Exception): + pass + + +class CharacterLength(Exception): + pass \ No newline at end of file