diff options
| author | Jon Dufresne <jon.dufresne@gmail.com> | 2020-04-19 08:51:43 -0700 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2020-04-20 07:22:20 +0200 |
| commit | 661e39c8d5bb05d8ebe8492912bf9f63453b279f (patch) | |
| tree | e609c8733810f5e5582c3d77e0b0ee8af8c37607 | |
| parent | 141ab6bc6d93d3a91259896f6ea3b7485172df88 (diff) | |
Fixed #24559 -- Made MigrationLoader.load_disk() catch more specific ModuleNotFoundError.
Avoids inspecting the exception message, which is not considered a
stable API and can change across Python versions.
ModuleNotFoundError was introduced in Python 3.6. It is a subclass of
ImportError that is raised when the imported module does not exist. It
is not raised for other errors that can occur during an import. This
exception instance has the property "name" which holds the name of
module that failed to import.
| -rw-r--r-- | django/db/migrations/loader.py | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/django/db/migrations/loader.py b/django/db/migrations/loader.py index 80945d0ffd..f0f0a42de3 100644 --- a/django/db/migrations/loader.py +++ b/django/db/migrations/loader.py @@ -79,11 +79,11 @@ class MigrationLoader: was_loaded = module_name in sys.modules try: module = import_module(module_name) - except ImportError as e: - # I hate doing this, but I don't want to squash other import errors. - # Might be better to try a directory check directly. - if ((explicit and self.ignore_no_migrations) or ( - not explicit and "No module named" in str(e) and MIGRATIONS_MODULE_NAME in str(e))): + except ModuleNotFoundError as e: + if ( + (explicit and self.ignore_no_migrations) or + (not explicit and MIGRATIONS_MODULE_NAME in e.name.split('.')) + ): self.unmigrated_apps.add(app_config.label) continue raise |
