Split safeprint into separate functions to remove deep indents.

This commit is contained in:
Ethan Dalool 2020-09-25 15:28:23 -07:00
parent 025c8d51a3
commit 6b546b39df

View file

@ -2,17 +2,22 @@
This function is slow and ugly, but I need a way to safely print unicode strings This function is slow and ugly, but I need a way to safely print unicode strings
on systems that don't support it without crippling those who do. on systems that don't support it without crippling those who do.
''' '''
def safeprint(text, file_handle=None, end='\n'): import sys
def safeprint_handle(text, *, file_handle, end='\n'):
for character in text: for character in text:
try: try:
if file_handle: file_handle.write(character)
file_handle.write(character)
else:
print(character, end='', flush=False)
except UnicodeError: except UnicodeError:
if file_handle: file_handle.write('?')
file_handle.write('?') file_handle.write(end)
else:
print('?', end='', flush=False) def safeprint_stdout(text, *, end='\n'):
if not file_handle: safeprint_handle(text=text, file_handle=sys.stdout, end=end)
print(end, end='', flush=True) sys.stdout.flush()
def safeprint(text, *, file_handle=None, end='\n'):
if file_handle is not None:
return safeprint_handle(text=text, file_handle=file_handle, end=end)
else:
return safeprint_stdout(text=text, end=end)