This is a pre-production deployment of Warehouse. Changes made here affect the production instance of PyPI (pypi.python.org).
Help us improve Python packaging - Donate today!

"Did You Mean?" on AttributeError

Project Description
#### Disclaimer

dutc = Don't Use This Code (!!)

# Did You mean?

This module implements "Did You Mean?" functionality on AttributeError.

*It's not what it does but how it does it!*

```python
>>> class Foo(object):
... def bar(self): pass
...
>>> foo = Foo()
```

Without `didyoumean`:

```python
>>> foo.baz
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'Foo' object has no attribute 'baz'
```

```python
>>> getattr(foo, 'baz')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'Foo' object has no attribute 'baz'
```

After importing `didyoumean`:

```python
>>> import didyoumean
>>> foo.baz
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'Foo' object has no attribute 'baz'

Maybe you meant: .bar
```

```python
>>> import didyoumean
>>> getattr(foo, 'baz')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'Foo' object has no attribute 'baz'

Maybe you meant: .bar
```

It works on old-style classes, new-style classes, type objects, builtins, everything.

```python
>>> # old-style class
...
>>> class Foo:
... def bar(self): pass
...
>>> Foo.baz
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: class Foo has no attribute 'baz'

Maybe you meant: .bar
```

```python
>>> # new-style class
...
>>> class Foo(object):
... def quux(self): pass
...
>>> foo = Foo()
>>> foo.baz
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'Foo' object has no attribute 'baz'

Maybe you meant: .quux
```

```python
>>> # types
...
>>> class Bar(Foo):
... def xyzzy(self): pass
...
>>> Bar.qux
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: type object 'Bar' has no attribute 'qux'

Maybe you meant: .quux

>>> Bar.xyzz
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: type object 'Bar' has no attribute 'xyzz'

Maybe you meant: .xyzzy
```

```python
>>> # builtins & everything else?
...
>>> object._new__
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: type object 'object' has no attribute '_new__'

Maybe you meant: .__new__

>>> object()._new__
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'object' object has no attribute '_new__'

Maybe you meant: .__new__
```

```python
>>> # works with getattr
...
>>> getattr(object, '_new__')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: type object 'object' has no attribute '_new__'

Maybe you meant: .__new__
```

```python
>>> # works with getattr
... # ... even if you don't want it to!
...
>>> g = getattr
>>> import didyoumean
>>> getattr(object, '_new__')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: type object 'object' has no attribute '_new__'

Maybe you meant: .__new__

>>> g(object, '_new__')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: type object 'object' has no attribute '_new__'

Maybe you meant: .__new__
```

#### How do I install it?

```shell
$ pip install dutc-didyoumean
```

#### How do I turn it off?

Restart your interpreter.

#### How does it work?

Well, see, that's the fun of it.

#### Is this approach ‘portable’?

Probably not.

#### Does this approach work on ...?

It works on Python 2. It works on Linux. It works on x86_64. It's unfortunate that it works anywhere.

#### Should I use this code?

Definitely not.

### License (GPLv3)

Copyright © 2014 James Powell <james@dontusethiscode.com>

This program is free software: you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
Foundation, either version 3 of the License, or (at your option) any later
version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with
this program. If not, see <http://www.gnu.org/licenses/>.
Release History

Release History

This version
History Node

0.1.6

History Node

0.1.5

History Node

0.1.4

History Node

0.1.3

History Node

0.1.2

History Node

0.1.1

History Node

0.1.0

Download Files

Download Files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

File Name & Checksum SHA256 Checksum Help Version File Type Upload Date
dutc-didyoumean-0.1.6.tar.gz (7.4 kB) Copy SHA256 Checksum SHA256 Source Oct 26, 2014

Supported By

WebFaction WebFaction Technical Writing Elastic Elastic Search Pingdom Pingdom Monitoring Dyn Dyn DNS Sentry Sentry Error Logging CloudAMQP CloudAMQP RabbitMQ Heroku Heroku PaaS Kabu Creative Kabu Creative UX & Design Fastly Fastly CDN DigiCert DigiCert EV Certificate Rackspace Rackspace Cloud Servers DreamHost DreamHost Log Hosting