We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
NameError on del version when init has ImportError
In `__init__.py`, `del version` gives `NameError` when `ImportError` happens.

```
try:
    from .version import version as __version__
except ImportError:
    __version__ = "unbuilt-dev"
del version
```

should be

```
try:
    from .version import version as __version__
except ImportError:
    __version__ = "unbuilt-dev"
else:
    del version
```


--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `skimage/__init__.py`
Content:
```
1 """Image Processing SciKit (Toolbox for SciPy)
2 
3 ``scikit-image`` (a.k.a. ``skimage``) is a collection of algorithms for image
4 processing and computer vision.
5 
6 The main package of ``skimage`` only provides a few utilities for converting
7 between image data types; for most features, you need to import one of the
8 following subpackages:
9 
10 Subpackages
11 -----------
12 color
13     Color space conversion.
14 data
15     Test images and example data.
16 draw
17     Drawing primitives (lines, text, etc.) that operate on NumPy arrays.
18 exposure
19     Image intensity adjustment, e.g., histogram equalization, etc.
20 feature
21     Feature detection and extraction, e.g., texture analysis corners, etc.
22 filter
23     Sharpening, edge finding, rank filters, thresholding, etc.
24 graph
25     Graph-theoretic operations, e.g., shortest paths.
26 io
27     Reading, saving, and displaying images and video.
28 measure
29     Measurement of image properties, e.g., similarity and contours.
30 morphology
31     Morphological operations, e.g., opening or skeletonization.
32 novice
33     Simplified interface for teaching purposes.
34 restoration
35     Restoration algorithms, e.g., deconvolution algorithms, denoising, etc.
36 segmentation
37     Partitioning an image into multiple regions.
38 transform
39     Geometric and other transforms, e.g., rotation or the Radon transform.
40 util
41     Generic utilities.
42 viewer
43     A simple graphical user interface for visualizing results and exploring
44     parameters.
45 
46 Utility Functions
47 -----------------
48 img_as_float
49     Convert an image to floating point format, with values in [0, 1].
50 img_as_uint
51     Convert an image to unsigned integer format, with values in [0, 65535].
52 img_as_int
53     Convert an image to signed integer format, with values in [-32768, 32767].
54 img_as_ubyte
55     Convert an image to unsigned byte format, with values in [0, 255].
56 
57 """
58 
59 import os.path as _osp
60 import imp as _imp
61 import functools as _functools
62 import warnings as _warnings
63 from skimage._shared.utils import deprecated as _deprecated
64 
65 pkg_dir = _osp.abspath(_osp.dirname(__file__))
66 data_dir = _osp.join(pkg_dir, 'data')
67 
68 try:
69     from .version import version as __version__
70 except ImportError:
71     __version__ = "unbuilt-dev"
72 del version
73 
74 
75 try:
76     _imp.find_module('nose')
77 except ImportError:
78     def _test(verbose=False):
79         """This would run all unit tests, but nose couldn't be
80         imported so the test suite can not run.
81         """
82         raise ImportError("Could not load nose. Unit tests not available.")
83 
84     def _doctest(verbose=False):
85         """This would run all doc tests, but nose couldn't be
86         imported so the test suite can not run.
87         """
88         raise ImportError("Could not load nose. Doctests not available.")
89 else:
90     def _test(doctest=False, verbose=False):
91         """Run all unit tests."""
92         import nose
93         args = ['', pkg_dir, '--exe', '--ignore-files=^_test']
94         if verbose:
95             args.extend(['-v', '-s'])
96         if doctest:
97             args.extend(['--with-doctest', '--ignore-files=^\.',
98                          '--ignore-files=^setup\.py$$', '--ignore-files=test'])
99             # Make sure warnings do not break the doc tests
100             with _warnings.catch_warnings():
101                 _warnings.simplefilter("ignore")
102                 success = nose.run('skimage', argv=args)
103         else:
104             success = nose.run('skimage', argv=args)
105         # Return sys.exit code
106         if success:
107             return 0
108         else:
109             return 1
110 
111 
112 # do not use `test` as function name as this leads to a recursion problem with
113 # the nose test suite
114 test = _test
115 test_verbose = _functools.partial(test, verbose=True)
116 test_verbose.__doc__ = test.__doc__
117 doctest = _functools.partial(test, doctest=True)
118 doctest.__doc__ = doctest.__doc__
119 doctest_verbose = _functools.partial(test, doctest=True, verbose=True)
120 doctest_verbose.__doc__ = doctest.__doc__
121 
122 
123 class _Log(Warning):
124     pass
125 
126 
127 class _FakeLog(object):
128     def __init__(self, name):
129         """
130         Parameters
131         ----------
132         name : str
133             Name of the log.
134         repeat : bool
135             Whether to print repeating messages more than once (False by
136             default).
137         """
138         self._name = name
139 
140         warnings.simplefilter("always", _Log)
141 
142         self._warnings = _warnings
143 
144     def _warn(self, msg, wtype):
145         self._warnings.warn('%s: %s' % (wtype, msg), _Log)
146 
147     def debug(self, msg):
148         self._warn(msg, 'DEBUG')
149 
150     def info(self, msg):
151         self._warn(msg, 'INFO')
152 
153     def warning(self, msg):
154         self._warn(msg, 'WARNING')
155 
156     warn = warning
157 
158     def error(self, msg):
159         self._warn(msg, 'ERROR')
160 
161     def critical(self, msg):
162         self._warn(msg, 'CRITICAL')
163 
164     def addHandler(*args):
165         pass
166 
167     def setLevel(*args):
168         pass
169 
170 
171 from .util.dtype import *
172
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/skimage/__init__.py b/skimage/__init__.py
--- a/skimage/__init__.py
+++ b/skimage/__init__.py
@@ -69,7 +69,8 @@
     from .version import version as __version__
 except ImportError:
     __version__ = "unbuilt-dev"
-del version
+else:
+    del version
 
 
 try:

{"golden_diff": "diff --git a/skimage/__init__.py b/skimage/__init__.py\n--- a/skimage/__init__.py\n+++ b/skimage/__init__.py\n@@ -69,7 +69,8 @@\n     from .version import version as __version__\n except ImportError:\n     __version__ = \"unbuilt-dev\"\n-del version\n+else:\n+    del version\n \n \n try:\n", "issue": "NameError on del version when init has ImportError\nIn `__init__.py`, `del version` gives `NameError` when `ImportError` happens.\n\n```\ntry:\n    from .version import version as __version__\nexcept ImportError:\n    __version__ = \"unbuilt-dev\"\ndel version\n```\n\nshould be\n\n```\ntry:\n    from .version import version as __version__\nexcept ImportError:\n    __version__ = \"unbuilt-dev\"\nelse:\n    del version\n```\n\n", "before_files": [{"content": "\"\"\"Image Processing SciKit (Toolbox for SciPy)\n\n``scikit-image`` (a.k.a. ``skimage``) is a collection of algorithms for image\nprocessing and computer vision.\n\nThe main package of ``skimage`` only provides a few utilities for converting\nbetween image data types; for most features, you need to import one of the\nfollowing subpackages:\n\nSubpackages\n-----------\ncolor\n    Color space conversion.\ndata\n    Test images and example data.\ndraw\n    Drawing primitives (lines, text, etc.) that operate on NumPy arrays.\nexposure\n    Image intensity adjustment, e.g., histogram equalization, etc.\nfeature\n    Feature detection and extraction, e.g., texture analysis corners, etc.\nfilter\n    Sharpening, edge finding, rank filters, thresholding, etc.\ngraph\n    Graph-theoretic operations, e.g., shortest paths.\nio\n    Reading, saving, and displaying images and video.\nmeasure\n    Measurement of image properties, e.g., similarity and contours.\nmorphology\n    Morphological operations, e.g., opening or skeletonization.\nnovice\n    Simplified interface for teaching purposes.\nrestoration\n    Restoration algorithms, e.g., deconvolution algorithms, denoising, etc.\nsegmentation\n    Partitioning an image into multiple regions.\ntransform\n    Geometric and other transforms, e.g., rotation or the Radon transform.\nutil\n    Generic utilities.\nviewer\n    A simple graphical user interface for visualizing results and exploring\n    parameters.\n\nUtility Functions\n-----------------\nimg_as_float\n    Convert an image to floating point format, with values in [0, 1].\nimg_as_uint\n    Convert an image to unsigned integer format, with values in [0, 65535].\nimg_as_int\n    Convert an image to signed integer format, with values in [-32768, 32767].\nimg_as_ubyte\n    Convert an image to unsigned byte format, with values in [0, 255].\n\n\"\"\"\n\nimport os.path as _osp\nimport imp as _imp\nimport functools as _functools\nimport warnings as _warnings\nfrom skimage._shared.utils import deprecated as _deprecated\n\npkg_dir = _osp.abspath(_osp.dirname(__file__))\ndata_dir = _osp.join(pkg_dir, 'data')\n\ntry:\n    from .version import version as __version__\nexcept ImportError:\n    __version__ = \"unbuilt-dev\"\ndel version\n\n\ntry:\n    _imp.find_module('nose')\nexcept ImportError:\n    def _test(verbose=False):\n        \"\"\"This would run all unit tests, but nose couldn't be\n        imported so the test suite can not run.\n        \"\"\"\n        raise ImportError(\"Could not load nose. Unit tests not available.\")\n\n    def _doctest(verbose=False):\n        \"\"\"This would run all doc tests, but nose couldn't be\n        imported so the test suite can not run.\n        \"\"\"\n        raise ImportError(\"Could not load nose. Doctests not available.\")\nelse:\n    def _test(doctest=False, verbose=False):\n        \"\"\"Run all unit tests.\"\"\"\n        import nose\n        args = ['', pkg_dir, '--exe', '--ignore-files=^_test']\n        if verbose:\n            args.extend(['-v', '-s'])\n        if doctest:\n            args.extend(['--with-doctest', '--ignore-files=^\\.',\n                         '--ignore-files=^setup\\.py$$', '--ignore-files=test'])\n            # Make sure warnings do not break the doc tests\n            with _warnings.catch_warnings():\n                _warnings.simplefilter(\"ignore\")\n                success = nose.run('skimage', argv=args)\n        else:\n            success = nose.run('skimage', argv=args)\n        # Return sys.exit code\n        if success:\n            return 0\n        else:\n            return 1\n\n\n# do not use `test` as function name as this leads to a recursion problem with\n# the nose test suite\ntest = _test\ntest_verbose = _functools.partial(test, verbose=True)\ntest_verbose.__doc__ = test.__doc__\ndoctest = _functools.partial(test, doctest=True)\ndoctest.__doc__ = doctest.__doc__\ndoctest_verbose = _functools.partial(test, doctest=True, verbose=True)\ndoctest_verbose.__doc__ = doctest.__doc__\n\n\nclass _Log(Warning):\n    pass\n\n\nclass _FakeLog(object):\n    def __init__(self, name):\n        \"\"\"\n        Parameters\n        ----------\n        name : str\n            Name of the log.\n        repeat : bool\n            Whether to print repeating messages more than once (False by\n            default).\n        \"\"\"\n        self._name = name\n\n        warnings.simplefilter(\"always\", _Log)\n\n        self._warnings = _warnings\n\n    def _warn(self, msg, wtype):\n        self._warnings.warn('%s: %s' % (wtype, msg), _Log)\n\n    def debug(self, msg):\n        self._warn(msg, 'DEBUG')\n\n    def info(self, msg):\n        self._warn(msg, 'INFO')\n\n    def warning(self, msg):\n        self._warn(msg, 'WARNING')\n\n    warn = warning\n\n    def error(self, msg):\n        self._warn(msg, 'ERROR')\n\n    def critical(self, msg):\n        self._warn(msg, 'CRITICAL')\n\n    def addHandler(*args):\n        pass\n\n    def setLevel(*args):\n        pass\n\n\nfrom .util.dtype import *\n", "path": "skimage/__init__.py"}], "after_files": [{"content": "\"\"\"Image Processing SciKit (Toolbox for SciPy)\n\n``scikit-image`` (a.k.a. ``skimage``) is a collection of algorithms for image\nprocessing and computer vision.\n\nThe main package of ``skimage`` only provides a few utilities for converting\nbetween image data types; for most features, you need to import one of the\nfollowing subpackages:\n\nSubpackages\n-----------\ncolor\n    Color space conversion.\ndata\n    Test images and example data.\ndraw\n    Drawing primitives (lines, text, etc.) that operate on NumPy arrays.\nexposure\n    Image intensity adjustment, e.g., histogram equalization, etc.\nfeature\n    Feature detection and extraction, e.g., texture analysis corners, etc.\nfilter\n    Sharpening, edge finding, rank filters, thresholding, etc.\ngraph\n    Graph-theoretic operations, e.g., shortest paths.\nio\n    Reading, saving, and displaying images and video.\nmeasure\n    Measurement of image properties, e.g., similarity and contours.\nmorphology\n    Morphological operations, e.g., opening or skeletonization.\nnovice\n    Simplified interface for teaching purposes.\nrestoration\n    Restoration algorithms, e.g., deconvolution algorithms, denoising, etc.\nsegmentation\n    Partitioning an image into multiple regions.\ntransform\n    Geometric and other transforms, e.g., rotation or the Radon transform.\nutil\n    Generic utilities.\nviewer\n    A simple graphical user interface for visualizing results and exploring\n    parameters.\n\nUtility Functions\n-----------------\nimg_as_float\n    Convert an image to floating point format, with values in [0, 1].\nimg_as_uint\n    Convert an image to unsigned integer format, with values in [0, 65535].\nimg_as_int\n    Convert an image to signed integer format, with values in [-32768, 32767].\nimg_as_ubyte\n    Convert an image to unsigned byte format, with values in [0, 255].\n\n\"\"\"\n\nimport os.path as _osp\nimport imp as _imp\nimport functools as _functools\nimport warnings as _warnings\nfrom skimage._shared.utils import deprecated as _deprecated\n\npkg_dir = _osp.abspath(_osp.dirname(__file__))\ndata_dir = _osp.join(pkg_dir, 'data')\n\ntry:\n    from .version import version as __version__\nexcept ImportError:\n    __version__ = \"unbuilt-dev\"\nelse:\n    del version\n\n\ntry:\n    _imp.find_module('nose')\nexcept ImportError:\n    def _test(verbose=False):\n        \"\"\"This would run all unit tests, but nose couldn't be\n        imported so the test suite can not run.\n        \"\"\"\n        raise ImportError(\"Could not load nose. Unit tests not available.\")\n\n    def _doctest(verbose=False):\n        \"\"\"This would run all doc tests, but nose couldn't be\n        imported so the test suite can not run.\n        \"\"\"\n        raise ImportError(\"Could not load nose. Doctests not available.\")\nelse:\n    def _test(doctest=False, verbose=False):\n        \"\"\"Run all unit tests.\"\"\"\n        import nose\n        args = ['', pkg_dir, '--exe', '--ignore-files=^_test']\n        if verbose:\n            args.extend(['-v', '-s'])\n        if doctest:\n            args.extend(['--with-doctest', '--ignore-files=^\\.',\n                         '--ignore-files=^setup\\.py$$', '--ignore-files=test'])\n            # Make sure warnings do not break the doc tests\n            with _warnings.catch_warnings():\n                _warnings.simplefilter(\"ignore\")\n                success = nose.run('skimage', argv=args)\n        else:\n            success = nose.run('skimage', argv=args)\n        # Return sys.exit code\n        if success:\n            return 0\n        else:\n            return 1\n\n\n# do not use `test` as function name as this leads to a recursion problem with\n# the nose test suite\ntest = _test\ntest_verbose = _functools.partial(test, verbose=True)\ntest_verbose.__doc__ = test.__doc__\ndoctest = _functools.partial(test, doctest=True)\ndoctest.__doc__ = doctest.__doc__\ndoctest_verbose = _functools.partial(test, doctest=True, verbose=True)\ndoctest_verbose.__doc__ = doctest.__doc__\n\n\nclass _Log(Warning):\n    pass\n\n\nclass _FakeLog(object):\n    def __init__(self, name):\n        \"\"\"\n        Parameters\n        ----------\n        name : str\n            Name of the log.\n        repeat : bool\n            Whether to print repeating messages more than once (False by\n            default).\n        \"\"\"\n        self._name = name\n\n        warnings.simplefilter(\"always\", _Log)\n\n        self._warnings = _warnings\n\n    def _warn(self, msg, wtype):\n        self._warnings.warn('%s: %s' % (wtype, msg), _Log)\n\n    def debug(self, msg):\n        self._warn(msg, 'DEBUG')\n\n    def info(self, msg):\n        self._warn(msg, 'INFO')\n\n    def warning(self, msg):\n        self._warn(msg, 'WARNING')\n\n    warn = warning\n\n    def error(self, msg):\n        self._warn(msg, 'ERROR')\n\n    def critical(self, msg):\n        self._warn(msg, 'CRITICAL')\n\n    def addHandler(*args):\n        pass\n\n    def setLevel(*args):\n        pass\n\n\nfrom .util.dtype import *\n", "path": "skimage/__init__.py"}]}