В этой статье в основном рассказывается о двух аспектах: ошибках, исключениях и модулях. Во время программирования неизбежно столкновение с сообщениями об ошибках.В Python также есть много видов сообщений об ошибках.Двумя распространенными из них являются синтаксические ошибки и логические ошибки.Существует много типов логических ошибок,занимающих большинство позиций в исключении.Давайте начать знакомить их со знанием этих двух понятий.
ошибки и исключения
Грамматические ошибки
Синтаксическая ошибка выражается как SyntaxError на английском языке, за которым следует некоторая поясняющая информация об ошибке, которая удобна для вас, чтобы найти ошибку в заявлении, следующим образом:
In [5]: print('naitangmao)
File "<ipython-input-5-d5b793a8884b>", line 1
print('naitangmao)
^
SyntaxError: EOL while scanning string literal
Синтаксическая ошибка, как следует из названия, означает, что ваш оператор кода написан неправильно.Например, ошибка в приведенном выше операторе — это отсутствие одной кавычки. После возникновения ошибки интерпретатор выдаст имя файла и номер строки с ошибкой, а также символ «^» под строкой с ошибкой, который будет напоминать вам о расположении кода ошибки, обычно перед стрелкой Эти советы помогут писателю как можно быстрее найти ошибку.
аномальный
Иногда строка кода может не иметь грамматических ошибок, но интерпретатор сообщит об этом красным цветом при ее выполнении.Такое сообщение об ошибке можно назвать исключением.По сравнению с синтаксическими ошибками существует больше типов исключений и они более распространены.
Возьмем два простых примера:
In [6]: print(1/0)
---------------------------------------------------------------------------
ZeroDivisionError Traceback (most recent call last)
<ipython-input-6-2fc232d1511a> in <module>
----> 1 print(1/0)
ZeroDivisionError: division by zero
Все знают, что 0 нельзя использовать в качестве знаменателя, поэтому Python выдаст ZeroDivisionError и напомнит вам, что это ошибка деления на ноль.
In [9]: 1+'1'
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-9-d3bd1e37a107> in <module>
----> 1 1+'1'
TypeError: unsupported operand type(s) for +: 'int' and 'str'
Между целыми числами и строками нет операции сложения, и после анализа интерпретатор выдаст TypeError, что является ошибкой типа, и позже даст объяснение ошибки.
Обработка исключений
Для интерпретатора Python, если в определенной части программы возникает исключение, код, стоящий за ним, не будет выполняться, но в Python есть способ обработать исключение, чтобы об исключении не сообщалось, а затем помочь всей программе. программа Для завершения выполнения это поведение называется перехватом исключения и реализуется комбинацией операторов try...except.
In [11]: a = 1;b = '2'
In [12]: try:
...: print(a+b)
...: except TypeError:
...: print('类型错误!')
类型错误!
Процесс реализации исключения:
- 1. Выполните часть между ключевыми словами try и exclude
- 2. Если исключений не возникает, предложение exclude игнорируется после выполнения оператора try.
- 3. Если во время выполнения предложения try возникает исключение, остальная часть предложения игнорируется. Если исключение соответствует типу исключения, указанному после ключевого слова, кроме ключевого слова, выполняется соответствующее предложение исключения. Затем продолжайте выполнять код после оператора try/except.
- 4. Если возникает исключение и в предложении exclude нет соответствующей ветви, оно передается вышестоящему оператору try. Если соответствующий оператор обработки не может быть найден в конце, он становится необработанным исключением, завершает программу и отображает подсказку.
Чтобы избежать четвертой ситуации, родительский класс Exception всех исключений можно использовать в операторе exclude, который охватывает все возможные исключения:
In [15]: try:
...: print(a+b)
...: except Exception as e:
...: print(e)
unsupported operand type(s) for +: 'int' and 'str'
Выбросить исключение
Использование оператора повышения может активно генерировать исключение, но генерируемое исключение должно быть классом исключения или экземпляром исключения, который должен быть унаследован от Exception.
In [16]: raise NameError('naitangmao')
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-16-b751158801b2> in <module>
----> 1 raise NameError('naitangmao')
NameError: naitangmao
В дополнение к приведенному выше введению пользователи также могут определять исключения в соответствии со своими потребностями, без дальнейшего введения, рекомендуемой частью является причина каждого исключения и метод обработки исключений.
модуль
Вторая часть - это модуль. Иногда мы можем использовать одну и ту же функцию между разными файлами. Глупый способ - копировать и копировать. Python предоставляет механизм для импорта содержимого одного файла в другой файл и его использования. Такой файл можно называется модулем.Следует отметить, что не любой файл может рассматриваться как модуль, но должен быть файлом, содержащим определения и объявления Python.
Чтобы привести простой пример, который поможет понять приведенный выше абзац, вы можете сначала создать файл odd_num.py, а затем в этом файле есть только одна функция, функция для фильтрации четных чисел в диапазоне:
In [18]: def odd(n):
...: result = []
...: for i in range(n):
...: if i % 2 != 0:
...: result.append(i)
...: return result
Затем мы можем импортировать этот модуль в другой файл, если мы хотим использовать эту функцию, мы можем передатьимя модуля.имя функцииметод для вызова этой функции следующим образом:
In [20]: import odd_num
In [21]: odd_num.odd(20)
Out[21]: [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
Если вы хотите использовать только подмодуль в модуле, вы можете указать часть, которую необходимо импортировать при импорте, чтобы подмодуль можно было использовать отдельно, без необходимости начинать симя модуля.имя функцииформа:
In [22]: from odd_num import odd
In [23]: odd(20)
Out[23]: [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
Если вы все еще хотите быть ленивым, вы можете использовать форму '*' для импорта, этот способ написания - импортировать все подмодули в модуль:
In [24]: from odd_num import *
Этот подход часто не рекомендуется, поскольку он делает код менее читаемым.
Если у вас много кастомных модулей, то для большей стандартизации и простоты поиска вы можете хранить эти модули в "пакете", при этом, например, в этом пакете должен быть файл с именем __init__.py, этот файл может быть пустым, но должен существовать, а затем способ импорта модулей в пакетеимя пакета.имя модуля.
В самом Python тоже есть своя библиотека модулей, некоторые модули встроены в интерпретатор, и тогда пользователи могут напрямую обращаться к интерфейсу таких модулей, что значительно повышает эффективность, например time, sys и т.д. Если вы относительно новичок в модуле, вы можете использовать функцию dir() для поиска определения модуля, и возвращаемый результат представляет собой список, включающий методы в модуле, интерфейсы, доступные для вызова, и т. д. .
In [24]:dir(time)
Out[24]:['_STRUCT_TM_ITEMS', '__doc__', '__loader__','__name__','__package__','__spec__','altzone','asctime','ctime','daylight',
'get_clock_info','gmtime','localtime','mktime','monotonic','monotonic_ns','perf_counter','perf_counter_ns','process_time',
'process_time_ns','sleep','strftime','strptime','struct_time','thread_time','thread_time_ns','time','time_ns','timezone','tzname']
Таким образом, это краткое изложение общеизвестных сведений об ошибках, исключениях и модулях.Если вас интересует использование на более высоком уровне, вы можете найти официальную документацию по Python, в которой будет более подробное введение.