Panicking on the error is much better than letting the system work continue on an undefined behaviour (good luck with debugging if you are ignoring all assertions)!
IMO there's a place for both. A print statement will reveal a flaw in the programmer's thinking regarding the control flow of the program and the state at that time. If a print statement gives something unexpected, you know exactly where to look in the debugger. If it gives you what you expected, it reveals the problem may be elsewhere