diff --git a/core/includes/bootstrap.inc b/core/includes/bootstrap.inc
index a67d7ff..6137a34 100644
--- a/core/includes/bootstrap.inc
+++ b/core/includes/bootstrap.inc
@@ -10,6 +10,7 @@
 use Drupal\Component\Utility\SafeMarkup;
 use Drupal\Component\Utility\Unicode;
 use Drupal\Core\Config\BootstrapConfigStorageFactory;
+use Drupal\Core\Extension\UnknownExtensionException;
 use Drupal\Core\Logger\RfcLogLevel;
 use Drupal\Core\Test\TestDatabase;
 use Drupal\Core\Session\AccountInterface;
@@ -237,7 +238,7 @@ function drupal_get_filename($type, $name, $filename = NULL) {
     try {
       return $extension_list->getPathname($name);
     }
-    catch (\InvalidArgumentException $e) {
+    catch (UnknownExtensionException $e) {
       // Catch the exception. This will result in triggering an error.
     }
   }
diff --git a/core/lib/Drupal/Core/Extension/ExtensionList.php b/core/lib/Drupal/Core/Extension/ExtensionList.php
index 6201a08..864bd16 100644
--- a/core/lib/Drupal/Core/Extension/ExtensionList.php
+++ b/core/lib/Drupal/Core/Extension/ExtensionList.php
@@ -227,7 +227,7 @@ public function exists($extension_name) {
    * @return string
    *   The human-readable name of the extension.
    *
-   * @throws \InvalidArgumentException
+   * @throws \Drupal\Core\Extension\UnknownExtensionException
    *   If there is no extension with the supplied machine name.
    */
   public function getName($extension_name) {
@@ -244,7 +244,7 @@ public function getName($extension_name) {
    *   A processed extension object for the extension with the specified machine
    *   name.
    *
-   * @throws \InvalidArgumentException
+   * @throws \Drupal\Core\Extension\UnknownExtensionException
    *   If there is no extension with the supplied name.
    */
   public function get($extension_name) {
@@ -253,7 +253,7 @@ public function get($extension_name) {
       return $extensions[$extension_name];
     }
 
-    throw new \InvalidArgumentException("The {$this->type} $extension_name does not exist.");
+    throw new UnknownExtensionException("The {$this->type} $extension_name does not exist.");
   }
 
   /**
@@ -334,7 +334,7 @@ protected function doList() {
    * @return mixed[]
    *   An associative array of extension information.
    *
-   * @throws \InvalidArgumentException
+   * @throws \Drupal\Core\Extension\UnknownExtensionException
    *   If there is no extension with the supplied name.
    */
   public function getExtensionInfo($extension_name) {
@@ -342,7 +342,7 @@ public function getExtensionInfo($extension_name) {
     if (isset($all_info[$extension_name])) {
       return $all_info[$extension_name];
     }
-    throw new \InvalidArgumentException("The {$this->type} $extension_name does not exist or is not installed.");
+    throw new UnknownExtensionException("The {$this->type} $extension_name does not exist or is not installed.");
   }
 
   /**
@@ -505,7 +505,7 @@ public function setPathname($extension_name, $pathname) {
    *   The drupal-root relative filename and path of the requested extension's
    *   .info.yml file.
    *
-   * @throws \InvalidArgumentException
+   * @throws \Drupal\Core\Extension\UnknownExtensionException
    *   If there is no extension with the supplied machine name.
    */
   public function getPathname($extension_name) {
@@ -518,7 +518,7 @@ public function getPathname($extension_name) {
     elseif (($path_names = $this->getPathnames()) && isset($path_names[$extension_name])) {
       return $path_names[$extension_name];
     }
-    throw new \InvalidArgumentException("The {$this->type} $extension_name does not exist.");
+    throw new UnknownExtensionException("The {$this->type} $extension_name does not exist.");
   }
 
   /**
@@ -533,7 +533,7 @@ public function getPathname($extension_name) {
    * @return string
    *   The Drupal-root-relative path to the specified extension.
    *
-   * @throws \InvalidArgumentException
+   * @throws \Drupal\Core\Extension\UnknownExtensionException
    *   If there is no extension with the supplied name.
    */
   public function getPath($extension_name) {
diff --git a/core/lib/Drupal/Core/Extension/ModuleHandler.php b/core/lib/Drupal/Core/Extension/ModuleHandler.php
index 2a2113f..f48116c 100644
--- a/core/lib/Drupal/Core/Extension/ModuleHandler.php
+++ b/core/lib/Drupal/Core/Extension/ModuleHandler.php
@@ -172,7 +172,7 @@ public function getModule($name) {
     if (isset($this->moduleList[$name])) {
       return $this->moduleList[$name];
     }
-    throw new \InvalidArgumentException(sprintf('The module %s does not exist.', $name));
+    throw new UnknownExtensionException(sprintf('The module %s does not exist.', $name));
   }
 
   /**
diff --git a/core/lib/Drupal/Core/Extension/ModuleHandlerInterface.php b/core/lib/Drupal/Core/Extension/ModuleHandlerInterface.php
index f1097e3..35cb5c5 100644
--- a/core/lib/Drupal/Core/Extension/ModuleHandlerInterface.php
+++ b/core/lib/Drupal/Core/Extension/ModuleHandlerInterface.php
@@ -61,7 +61,7 @@ public function getModuleList();
    * @return \Drupal\Core\Extension\Extension
    *   An extension object.
    *
-   * @throws \InvalidArgumentException
+   * @throws \Drupal\Core\Extension\UnknownExtensionException
    *   Thrown when the requested module does not exist.
    */
   public function getModule($name);
diff --git a/core/lib/Drupal/Core/Extension/ThemeHandler.php b/core/lib/Drupal/Core/Extension/ThemeHandler.php
index d54ff1f..fdaf585 100644
--- a/core/lib/Drupal/Core/Extension/ThemeHandler.php
+++ b/core/lib/Drupal/Core/Extension/ThemeHandler.php
@@ -147,7 +147,7 @@ public function getDefault() {
   public function setDefault($name) {
     $list = $this->listInfo();
     if (!isset($list[$name])) {
-      throw new \InvalidArgumentException("$name theme is not installed.");
+      throw new UninstalledExtensionException("$name theme is not installed.");
     }
     $this->configFactory->getEditable('system.theme')
       ->set('default', $name)
@@ -437,7 +437,7 @@ protected function getExtensionDiscovery() {
   public function getName($theme) {
     $themes = $this->listInfo();
     if (!isset($themes[$theme])) {
-      throw new \InvalidArgumentException("Requested the name of a non-existing theme $theme");
+      throw new UnknownExtensionException("Requested the name of a non-existing theme $theme");
     }
     return $themes[$theme]->info['name'];
   }
@@ -486,7 +486,7 @@ public function getTheme($name) {
     if (isset($themes[$name])) {
       return $themes[$name];
     }
-    throw new \InvalidArgumentException(sprintf('The theme %s does not exist.', $name));
+    throw new UnknownExtensionException(sprintf('The theme %s does not exist.', $name));
   }
 
   /**
diff --git a/core/lib/Drupal/Core/Extension/ThemeHandlerInterface.php b/core/lib/Drupal/Core/Extension/ThemeHandlerInterface.php
index a82be6a..a80831e 100644
--- a/core/lib/Drupal/Core/Extension/ThemeHandlerInterface.php
+++ b/core/lib/Drupal/Core/Extension/ThemeHandlerInterface.php
@@ -39,8 +39,8 @@ public function install(array $theme_list, $install_dependencies = TRUE);
    * @param array $theme_list
    *   The themes to uninstall.
    *
-   * @throws \InvalidArgumentException
-   *   Thrown when you uninstall an not installed theme.
+   * @throws \Drupal\Core\Extension\UninstalledExtensionException
+   *   Thrown when you try to uninstall a theme that wasn't installed.
    *
    * @see hook_themes_uninstalled()
    *
@@ -147,6 +147,9 @@ public function getBaseThemes(array $themes, $theme);
    *
    * @return string
    *   Returns the human readable name of the theme.
+   *
+   * @throws \Drupal\Core\Extension\UnknownExtensionException
+   *   When the specified theme does not exist.
    */
   public function getName($theme);
 
@@ -207,7 +210,7 @@ public function themeExists($theme);
    * @return \Drupal\Core\Extension\Extension
    *   An extension object.
    *
-   * @throws \InvalidArgumentException
+   * @throws \Drupal\Core\Extension\UnknownExtensionException
    *   Thrown when the requested theme does not exist.
    */
   public function getTheme($name);
diff --git a/core/lib/Drupal/Core/Extension/ThemeInstaller.php b/core/lib/Drupal/Core/Extension/ThemeInstaller.php
index 43a5469..c6d6106 100644
--- a/core/lib/Drupal/Core/Extension/ThemeInstaller.php
+++ b/core/lib/Drupal/Core/Extension/ThemeInstaller.php
@@ -111,7 +111,7 @@ public function install(array $theme_list, $install_dependencies = TRUE) {
 
       if ($missing = array_diff_key($theme_list, $theme_data)) {
         // One or more of the given themes doesn't exist.
-        throw new \InvalidArgumentException('Unknown themes: ' . implode(', ', $missing) . '.');
+        throw new UnknownExtensionException('Unknown themes: ' . implode(', ', $missing) . '.');
       }
 
       // Only process themes that are not installed currently.
@@ -221,7 +221,7 @@ public function uninstall(array $theme_list) {
     $list = $this->themeHandler->listInfo();
     foreach ($theme_list as $key) {
       if (!isset($list[$key])) {
-        throw new \InvalidArgumentException("Unknown theme: $key.");
+        throw new UninstalledExtensionException("Unknown theme: $key.");
       }
       if ($key === $theme_config->get('default')) {
         throw new \InvalidArgumentException("The current default theme $key cannot be uninstalled.");
diff --git a/core/lib/Drupal/Core/Extension/ThemeInstallerInterface.php b/core/lib/Drupal/Core/Extension/ThemeInstallerInterface.php
index ad80762..a37c432 100644
--- a/core/lib/Drupal/Core/Extension/ThemeInstallerInterface.php
+++ b/core/lib/Drupal/Core/Extension/ThemeInstallerInterface.php
@@ -22,6 +22,9 @@
    *
    * @throws \Drupal\Core\Extension\ExtensionNameLengthException
    *   Thrown when the theme name is to long.
+   *
+   * @throws \Drupal\Core\Extension\UnknownExtensionException
+   *   Thrown when the theme does not exist.
    */
   public function install(array $theme_list, $install_dependencies = TRUE);
 
@@ -34,8 +37,8 @@ public function install(array $theme_list, $install_dependencies = TRUE);
    * @param array $theme_list
    *   The themes to uninstall.
    *
-   * @throws \InvalidArgumentException
-   *   Thrown when you uninstall an not installed theme.
+   * @throws \Drupal\Core\Extension\UninstalledExtensionException
+   *   Thrown when trying to uninstall a theme that was not installed.
    *
    * @see hook_themes_uninstalled()
    */
diff --git a/core/lib/Drupal/Core/Extension/UninstalledExtensionException.php b/core/lib/Drupal/Core/Extension/UninstalledExtensionException.php
new file mode 100644
index 0000000..0f495ee
--- /dev/null
+++ b/core/lib/Drupal/Core/Extension/UninstalledExtensionException.php
@@ -0,0 +1,8 @@
+<?php
+
+namespace Drupal\Core\Extension;
+
+/**
+ * Exception class thrown when a specified extension has not been installed.
+ */
+class UninstalledExtensionException extends \RuntimeException { }
diff --git a/core/lib/Drupal/Core/Extension/UnknownExtensionException.php b/core/lib/Drupal/Core/Extension/UnknownExtensionException.php
new file mode 100644
index 0000000..a139540
--- /dev/null
+++ b/core/lib/Drupal/Core/Extension/UnknownExtensionException.php
@@ -0,0 +1,8 @@
+<?php
+
+namespace Drupal\Core\Extension;
+
+/**
+ * Exception class thrown when a specified extension is not on the filesystem.
+ */
+class UnknownExtensionException extends \RuntimeException { }
diff --git a/core/modules/system/system.module b/core/modules/system/system.module
index bb82d4b..a14f90e 100644
--- a/core/modules/system/system.module
+++ b/core/modules/system/system.module
@@ -9,6 +9,7 @@
 use Drupal\Component\Utility\UrlHelper;
 use Drupal\Core\Asset\AttachedAssetsInterface;
 use Drupal\Core\Cache\Cache;
+use Drupal\Core\Extension\UnknownExtensionException;
 use Drupal\Core\Queue\QueueGarbageCollectionInterface;
 use Drupal\Core\Database\Query\AlterableInterface;
 use Drupal\Core\Extension\Extension;
@@ -966,7 +967,7 @@ function system_get_info($type, $name = NULL) {
       try {
         return $module_list->getExtensionInfo($name);
       }
-      catch (\InvalidArgumentException $e) {
+      catch (UnknownExtensionException $e) {
         return [];
       }
     }
diff --git a/core/tests/Drupal/Tests/Core/Extension/ExtensionListTest.php b/core/tests/Drupal/Tests/Core/Extension/ExtensionListTest.php
index 80a0c76..d0450ab 100644
--- a/core/tests/Drupal/Tests/Core/Extension/ExtensionListTest.php
+++ b/core/tests/Drupal/Tests/Core/Extension/ExtensionListTest.php
@@ -9,6 +9,7 @@
 use Drupal\Core\Extension\ExtensionList;
 use Drupal\Core\Extension\InfoParserInterface;
 use Drupal\Core\Extension\ModuleHandlerInterface;
+use Drupal\Core\Extension\UnknownExtensionException;
 use Drupal\Core\State\StateInterface;
 use Drupal\Tests\UnitTestCase;
 use org\bovigo\vfs\vfsStream;
@@ -31,7 +32,7 @@ public function testGetNameWithNonExistingExtension() {
     $extension_discovery->scan('test_extension')->willReturn([]);
     $test_extension_list->setExtensionDiscovery($extension_discovery->reveal());
 
-    $this->setExpectedException(\InvalidArgumentException::class);
+    $this->setExpectedException(UnknownExtensionException::class);
     $test_extension_list->getName('test_name');
   }
 
@@ -55,7 +56,7 @@ public function testGetWithNonExistingExtension() {
     $extension_discovery->scan('test_extension')->willReturn([]);
     $test_extension_list->setExtensionDiscovery($extension_discovery->reveal());
 
-    $this->setExpectedException(\InvalidArgumentException::class);
+    $this->setExpectedException(UnknownExtensionException::class);
     $test_extension_list->get('test_name');
   }
 
diff --git a/core/tests/Drupal/Tests/Core/Extension/ModuleHandlerTest.php b/core/tests/Drupal/Tests/Core/Extension/ModuleHandlerTest.php
index 4fda002..13d3e93 100644
--- a/core/tests/Drupal/Tests/Core/Extension/ModuleHandlerTest.php
+++ b/core/tests/Drupal/Tests/Core/Extension/ModuleHandlerTest.php
@@ -5,6 +5,7 @@
 use Drupal\Core\Cache\CacheBackendInterface;
 use Drupal\Core\Extension\Extension;
 use Drupal\Core\Extension\ModuleHandler;
+use Drupal\Core\Extension\UnknownExtensionException;
 use Drupal\Tests\UnitTestCase;
 
 /**
@@ -164,7 +165,7 @@ public function testGetModuleWithExistingModule() {
    * @covers ::getModule
    */
   public function testGetModuleWithNonExistingModule() {
-    $this->setExpectedException(\InvalidArgumentException::class);
+    $this->setExpectedException(UnknownExtensionException::class);
     $this->getModuleHandler()->getModule('claire_alice_watch_my_little_pony_module_that_does_not_exist');
   }
 
