An interpreted programming language is one where a source file is executed directly by an interpreter. Interpreters generally have more flexibility than a compiled language, at the expense of run-time speed.
Interpreters generally offer the same behavior on different platforms, unlike compiled code that is typically tied to one platform.
Due to the nature of execution inside an interpreter, syntactic or semantic errors may not be reported unless a particular branch of code with the error is executed. Also an interpreter always has access to the original source code so errors can be reported clearly and accurately, and debugging can be much easier.
Some interpreters also perform optimizations on the code at run-time, one of the biggest ones being JIT compilation.