Python 2.x получил ошибки и мины - PullRequest
61 голосов
/ 10 февраля 2009

Цель моего вопроса - укрепить мою базу знаний с помощью Python и получить более полное представление о ней, включая знание ее недостатков и неожиданностей. Если говорить конкретно, меня интересует только интерпретатор CPython.

Я ищу что-то похожее на то, чему научились мои мины PHP вопрос, где некоторые ответы были мне хорошо известны, но пара была ужасающей.

Обновление: Видимо, один, может быть, два человека расстроены тем, что я задал вопрос, на который уже частично ответили за пределами переполнения стека. В качестве какого-то компромисса вот URL http://www.ferg.org/projects/python_gotchas.html

Обратите внимание, что один или два ответа здесь уже являются оригинальными из того, что было написано на сайте, указанном выше.

Ответы [ 23 ]

0 голосов
/ 14 июня 2017

Из-за «правдивости» это имеет смысл:

>>>bool(1)
True

но вы не можете ожидать, что он пойдет другим путем:

>>>float(True)
1.0

Это может быть ошибкой, если вы преобразуете строки в числовые, и ваши данные имеют значения True / False.

0 голосов
/ 19 марта 2015

Значения range(end_val) не только строго меньше end_val, но и строго меньше int(end_val). Для float аргумента range это может быть неожиданным результатом:

from future.builtins import range
list(range(2.89))
[0, 1]
0 голосов
/ 16 мая 2014

Если вы присваиваете переменную внутри функции, Python предполагает, что переменная определена внутри этой функции:

>>> x = 1
>>> def increase_x():
...     x += 1
... 
>>> increase_x()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, in increase_x
UnboundLocalError: local variable 'x' referenced before assignment

Используйте global x (или nonlocal x в Python 3), чтобы объявить, что вы хотите установить переменную, определенную вне вашей функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...