Статьи

5 общих проблем, с которыми сталкиваются начинающие Python

Вы в процессе изучения Python? Это фантастический язык для изучения, но, как и для любого языка, он создает проблемы, которые иногда могут показаться непосильными, особенно если вы учите себя.

Учитывая все различные способы работы в Python, мы решили составить полезный список проблем, с которыми часто сталкиваются новички, а также их решения.

изучение Python

1. Чтение из терминала

Если вы запускаете программу на терминале и вам нужен пользовательский ввод, вам может потребоваться получить ее через сам терминал. (Другие альтернативы включают чтение файла для получения входных данных.)

В Python функция raw_input облегчает это. Единственный аргумент, который принимает функция — это приглашение. Давайте посмотрим на небольшую программу, чтобы увидеть результат:

 name = raw_input('Type your name and press enter: ')
print 'Hi ' + name

Если вы сохраните эти строки в файле (с расширением .py

 Type your name and press enter: Shaumik
Hi Shaumik

Здесь важно отметить, что переменная является строкой, и вам необходимо отфильтровать и преобразовать ее, чтобы использовать ее в другой форме (например, для ввода числа итераций или длины матрицы):

 name = raw_input('Type your name and press enter: ')
print 'Hi ' + name
num = raw_input('How many times do you want to print your name: ')
for i in range(int(num)):
    print name

2. Перечисление в Python

Python часто представляет способы отличаться от других популярных языков программирования, таких как C ++ и Java. Когда вы просматриваете массив на других языках, вы увеличиваете целое число от 0 Ниже показан грубый способ сделать то же самое:

 for (int i = 0; i < array_length; ++i)
    cout << array[i];

Однако в Python вы можете просто обойти каждый элемент массива, не используя индексы вообще:

 for item in array:
    print item

Что делать, если есть необходимость доступа к индексам тоже? Функция enumerate поможет вам сделать это. Перечисление массива (или списка , как это известно в Python) создает пары элементов в массиве и их индексы. То же самое можно продемонстрировать следующим образом:

 >>> x = [10, 11, 12, 13, 14]
>>> for item in enumerate(x):
...     print item
...
(0, 10)
(1, 11)
(2, 12)
(3, 13)
(4, 14)

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

 >>> for index, item in enumerate(x):
...     if index % 2 == 0:
...         print item
...
10
12
14

3. Выполнение внешней команды через Python

В какой-то момент вам может понадобиться выполнить команду терминала в скрипте Python. Это может быть достигнуто с помощью функции callsubprocess . Есть много способов сделать это, один из которых показан ниже:

 >>> from subprocess import call
>>> call('cal')
     March 2016
Su Mo Tu We Th Fr Sa
       1  2  3  4  5
 6  7  8  9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31

0

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

Если вам нужно использовать аргументы для команды, вам нужно добавить их в основную команду в виде списка. Например, чтобы выполнить команду ls -l

 >>> from subprocess import call
>>> call(['ls', '-l'])
total 16
-rw-------@ 1 donny  staff  439 Oct 21 16:06 chess.csv
-rw-r--r--  1 donny  staff   72 Mar  1 17:28 read.py
0

Чтобы проверить, что происходит с 0

 >>> from subprocess import call
>>> call(['git', 'status'])
fatal: Not a git repository (or any of the parent directories): .git
128

В выходных данных вторая строка — это выходные данные команды, а 128

4. Работа с исключениями

Python является интерпретируемым языком, что означает, что код выполняется построчно. Если в строке обнаружена ошибка, дальнейшее выполнение кода прекращается. Однако вы можете обрабатывать известные исключения в Python, используя блок try-exc. Давайте рассмотрим простой пример, генерируя ошибку времени деления на 0

 >>> x = 1/0
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ZeroDivisionError: integer division or modulo by zero

Когда интерпретатор достигает этой строки, выполнение вашей программы полностью останавливается! Тем не менее, использование блока try-Кроме может помочь избежать того же.

 >>> try:
...     x = 1/0
... except:
...     print "Some error occurred"
...
Some error occurred

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

 >>> try:
...     x = 1/0
... except ZeroDivisionError:
...     print "You tried to divide by zero"
... except:
...     print "Some unknown error occurred"
...
You tried to divide by zero

Вы можете пойти на шаг вперед, поймать исключение и продолжить его обработку (например, где-нибудь записать ошибку), изменив блок исключений :

 >>> try:
...     x = 1/0
... except Exception as e:
...     print "Exception occurred: " + str(e)
...
Exception occurred: integer division or modulo by zero

5. Работа с модулями

Глядя на код других, вы часто сталкиваетесь с этим блоком кода:

 def some_function():
    ...

if __name__ == '__main__':
    ...

Это часто используется при создании модулей в Python. В идеале код в последнем блоке обычно демонстрирует некоторое базовое использование функций, указанных выше. Когда вы запускаете файл в терминале, этот код выполняется. Однако, если вы используете этот модуль в другом файле с целью использования функции, этот блок не выполняется. Смешение? Давайте лучше разберемся в этом на примере:

 # File print.py
def print_me():
    print "me"

# demonstrating use of print_me
print_me()

Теперь, если я импортирую этот файл, чтобы использовать функцию в новом файле, посмотрим, что произойдет:

 >>> import print
me
>>>

Функция выполняется, как только вы импортируете файл. Чтобы избежать этого, мы помещаем функцию в блок if __name__ == '__main__':

 # File print.py
def print_me():
    print "me"

if __name__ == '__main__':
    # demonstrating use of print_me
    print_me()

Когда мы модифицируем код, print_me()

 >>> import print
>>>

Последние мысли

Если Python не является вашим первым языком программирования, потребуется некоторое время, чтобы приспособиться к его образу действий. Я рекомендую вам посмотреть интересное видео на YouTube, где Рэймонд Хеттингер объясняет этот Pythonic путь программирования В этом посте я попытался осветить некоторые из этих проблем Pythonic.

Как прошло ваше путешествие в Pythonic или как оно продолжается? Вы предпочитаете делать эти задачи по-другому? Дайте нам знать в комментариях ниже!