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
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:
try:
if file_handle:
file_handle.write(character)
else:
print(character, end='', flush=False)
file_handle.write(character)
except UnicodeError:
if file_handle:
file_handle.write('?')
else:
print('?', end='', flush=False)
if not file_handle:
print(end, end='', flush=True)
file_handle.write('?')
file_handle.write(end)
def safeprint_stdout(text, *, end='\n'):
safeprint_handle(text=text, file_handle=sys.stdout, end=end)
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)