﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
35308	FileNotFoundError escapes from run_formatters()	Jacob Walls	nobody	"Two members of my team have now run into [https://forum.djangoproject.com/t/black-library-error/20897/3 this issue] described on the Django forum.

In essence, it's not safe to assume that just because `shutil.which(""black"")` returns a path that `subprocess.run()` can execute that path. 

Some [https://docs.python.org/3/library/shutil.html#shutil.which complications] with `shutil.which(..., path=None)`:
- Reads a path variable from one or two fallbacks (either os.environ() or os.defpath)
- Behavior is different on Windows
- Behavior is different on Windows with Python 3.12.0
- Behavior is different on Windows with Python 3.12.1

My impression of the feature was that it was aiming at a frictionless experience -- format if you have a working black install, don't if you don't.

Suggesting we should catch `FileNotFoundError` (at least) and at most log out an explanation why the file wasn't formatted. Users who only have a copy of black in abandoned environments are unlikely to care about their files not being formatted. :-)"	Bug	new	Uncategorized	4.2	Normal		black		Unreviewed	0	0	0	0	0	0
