Repository: yt-dlp
Issue: Standard for how to handle Not Found
Labels: docs/meta/cleanup,duplicate,enhancement,triage,core:extractor

### DO NOT REMOVE OR SKIP THE ISSUE TEMPLATE

- [X] I understand that I will be **blocked** if I *intentionally* remove or skip any mandatory\* field

### Checklist

- [X] I'm requesting a feature unrelated to a specific site
- [X] I've looked through the [README](https://github.com/yt-dlp/yt-dlp#readme)
- [X] I've verified that I'm running yt-dlp version **2023.06.22** ([update instructions](https://github.com/yt-dlp/yt-dlp#update)) or later (specify commit)
- [X] I've searched [known issues](https://github.com/yt-dlp/yt-dlp/issues/3766) and the [bugtracker](https://github.com/yt-dlp/yt-dlp/issues?q=) for similar issues **including closed ones**. DO NOT post duplicates
- [X] I've read the [guidelines for opening an issue](https://github.com/yt-dlp/yt-dlp/blob/master/CONTRIBUTING.md#opening-an-issue)

### Provide a description that is worded well enough to be understood

I tried to find any previous information about this but didn't see anything in READMEs, wiki, or in the `InfoExtractor` docstring. I looked some in the previous issues but there were thousands of results for not found and similar searches. I saw `_availability` but the options there don't seem to cover cases where the video doesn't exist for whatever reason.

It seems to be common to either raise `ExtractorError` or use `raise_no_formats()` with some kind of description about it. This seems like a common enough case to have documented standard and standard way to test for and report to user. I'm of the opinion that there should be a `class NotFoundError(ExtractorError):` or similar and that the `InfoExtractor` docstring should have a raises section but I don't know enough about the code base to know if that's really the right way to handle.

I'd be happy to try to help implement but wanted to have a discussion first.

### Provide verbose output that clearly demonstrates the problem

- [x] Run **your** yt-dlp command with **-vU** flag added (`yt-dlp -vU <your command line>`)
- [x] If using API, add `'verbose': True` to `YoutubeDL` params instead
- [x] Copy the WHOLE output (starting with `[debug] Command-line config`) and insert it below

### Complete Verbose Output

```shell
[debug] Command-line config: ['-vU']
[debug] User config "<redacted>/.config/yt-dlp/config": ['--downloader-args', 'aria2c:--check-certificate=false', '--downloader', 'aria2c']
[debug] Encodings: locale UTF-8, fs utf-8, pref UTF-8, out utf-8, error utf-8, screen utf-8
[debug] yt-dlp version stable@2023.06.22 [812cdfa06] (source)
[debug] Lazy loading extractors is disabled
[debug] Git HEAD: fcbc9ed76
[debug] Python 3.11.3 (CPython x86_64 64bit) - Linux-5.15.90.1-microsoft-standard-WSL2+-x86_64-with-glibc2.35 (OpenSSL 3.0.2 15 Mar 2022, glibc 2.35)
[debug] exe versions: ffmpeg 4.4.2 (setts), ffprobe 4.4.2
[debug] Optional libraries: Cryptodome-3.18.0, brotli-1.0.9, certifi-2023.05.07, mutagen-1.46.0, secretstorage-3.3.3, sqlite3-2.6.0, websockets-11.0.3
[debug] Proxy map: {}
[debug] Loaded 1852 extractors
[debug] Fetching release info: https://api.github.com/repos/yt-dlp/yt-dlp/releases/latest
Available version: stable@2023.06.22, Current version: stable@2023.06.22
yt-dlp is up to date (stable@2023.06.22)
```