$ cat src/bom.py
import sys
$ file src/bom.py
src/bom.py: UTF-8 Unicode (with BOM) text
$ python src/bom.py
$ absolufy-imports src/bom.py
Traceback (most recent call last):
File "/tmp/py310/bin/absolufy-imports", line 8, in <module>
sys.exit(main())
File "/tmp/py310/lib/python3.10/site-packages/absolufy_imports.py", line 208, in main
absolute_imports(
File "/tmp/py310/lib/python3.10/site-packages/absolufy_imports.py", line 151, in absolute_imports
tree = ast.parse(txt)
File "/opt/python-3.10.0/lib/python3.10/ast.py", line 50, in parse
return compile(source, filename, mode, flags,
File "<unknown>", line 1
import sys
^
SyntaxError: invalid non-printable character U+FEFF
Perhaps a better message could help? Or try to compare these two uses reading the source file, the last with encoding='utf-8-sig'
:
$ python -c "from ast import parse; from pathlib import Path; parse(Path('src/bom.py').read_text())"
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/opt/python-3.10.0/lib/python3.10/ast.py", line 50, in parse
return compile(source, filename, mode, flags,
File "<unknown>", line 1
import sys
^
SyntaxError: invalid non-printable character U+FEFF
$ python -c "from ast import parse; from pathlib import Path; parse(Path('src/bom.py').read_text(encoding='utf-8-sig'))"
$