I'm currently still in the early stages of learning Python and Jupyter notebooks, and I wanted to ask if the following code for returning absolute paths relative to the directory of a script (.py) or Jupyter notebook (.ipynb) file could be improved, particularly on the test which checks whether the absolute_path() function is called in a .py or .ipynb file. ruff tells me not to use bare except, but I don't know how to deal with the warning.
# $HOME/
# └─ project/
# ├─ data/
# └─ src/
# └─ project/
# ├─ project.ipynb
# └─ project.py
# $HOME/project/src/project/project.py
from pathlib import Path
import ipynbname
from IPython import get_ipython
def absolute_path(relative_path: str | None = None) -> Path:
try:
get_ipython()
file_path = Path(ipynbname.path())
except:
file_path = Path(__file__).resolve()
file_dir_path = file_path.parent
path = Path(
f"{file_dir_path}"
if relative_path is None
else f"{file_dir_path}/{relative_path}"
).resolve()
return path
root_dir_path = absolute_path("../..")
data_dir_path = absolute_path("../../data")
src_dir_path = absolute_path("..")
file_dir_path = absolute_path()
print(f"{root_dir_path = }")
print(f"{data_dir_path = }")
print(f"{src_dir_path = }")
print(f"{file_dir_path = }")
# A cell inside $HOME/project/src/project/project.ipynb
from pathlib import Path
import ipynbname
from IPython import get_ipython
def absolute_path(relative_path: str | None = None) -> Path:
try:
get_ipython()
file_path = Path(ipynbname.path())
except:
file_path = Path(__file__).resolve()
file_dir_path = file_path.parent
path = Path(
f"{file_dir_path}"
if relative_path is None
else f"{file_dir_path}/{relative_path}"
).resolve()
return path
root_dir_path = absolute_path("../..")
data_dir_path = absolute_path("../../data")
src_dir_path = absolute_path("..")
file_dir_path = absolute_path()
print(f"{root_dir_path = }")
print(f"{data_dir_path = }")
print(f"{src_dir_path = }")
print(f"{file_dir_path = }")