Same underlying condition, two different layers noticing it.
"bad CPU type in executable" comes from the system trying to launch a program. You asked to run an Intel binary and there is no translation available for it — usually because Rosetta is not installed.
"mach-o file, but is an incompatible architecture" comes from something trying to load a library into an already-running process. This one cannot be solved by translation at all: a process is either Intel or ARM for its whole life, and you cannot load an Intel library into an ARM process. The error politely names both sides — have 'x86_64', need 'arm64' means the file on disk is Intel and the process asking for it is ARM.
That second one is the one that bites Python users, because a native ARM Python is trying to import a package that shipped an Intel binary. There is no flag that fixes it. The package has to be reinstalled for the right architecture, or the whole environment has to run as Intel.