Введение
Python — это язык программирования общего назначения, который имеет широкий спектр применений в научных вычислениях и машинном обучении.
Как работает питон
- интерактивный интерпретатор оболочки
- Метод файла, расширение py
Установите сторонние пакеты плагинов
pip install [pkgName]
Выход: функция печати
грамматика:
print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)
- Отформатируйте объект как строковое представление и выведите его в объектный файл потокового файла. Все аргументы, не являющиеся ключевыми словами, преобразуются в строковый вывод в режиме str();
- Параметр ключевого слова sep предназначен для реализации разделителя.Например, когда выводятся несколько параметров, вы хотите вывести символ разделителя посередине;
- Параметр ключевого слова end — это символ в конце вывода, по умолчанию — символ новой строки \n;
- Файл параметров ключевого слова — это файл, определяющий поток вывода, который может быть стандартным системным выводом sys.stdout или может быть переопределен как другой файл;
- Параметр ключевого слова flush предназначен для немедленного вывода содержимого в потоковый файл без кэширования.
[Пример] При отсутствии параметра строка будет меняться после каждого выхода.
shoplist = ['apple', 'mango', 'carrot', 'banana']
print("This is printed without 'end'and 'sep'.")
for item in shoplist:
print(item)
# This is printed without 'end'and 'sep'.
# apple
# mango
# carrot
# banana
shoplist = ['apple', 'mango', 'carrot', 'banana']
print("This is printed with 'end='&''.")
for item in shoplist:
print(item, end='&')
print('hello world')
# This is printed with 'end='&''.
# apple&mango&carrot&banana&hello world
shoplist = ['apple', 'mango', 'carrot', 'banana']
print("This is printed with 'sep='&''.")
for item in shoplist:
print(item, 'another string', sep='&')
# This is printed with 'sep='&''.
# apple&another string
# mango&another string
# carrot&another string
# banana&another string
Вход: функция ввода
Тип, возвращаемый функцией input(), представляет собой строку
price = input('请输入价格:')
price
type(price)
# <class 'str'>
стиль
- однострочный комментарий
#
# 这是一个注释
print("Hello world")
- многострочный комментарий
'''
这是多行注释,用三个单引号
这是多行注释,用三个单引号
这是多行注释,用三个单引号
'''
print("Hello china")
- Продолжение
\
if signal == 'red' and\
car == 'moving':
car='stop'
# 等同于
if signal == 'red' and car == 'moving':
car='stop'
Два случая, когда разрывы строк можно делать без продолжения
- Скобки, квадратные скобки и фигурные скобки можно размещать на нескольких строках.
- Строки, заключенные в тройные кавычки, можно переносить через строки.
print('''hi everybody,
welcome to python,
what is your name?''')
- Несколько операторов в одной строке
использовать
;
x='Today';y='is';z='Thursday';print(x,y,z)
- отступ
Python использует один и тот же отступ для представления блоков операторов на одном уровне. Увеличьте отступ, чтобы указать начало блока операторов Уменьшите отступ, чтобы указать выход из блока операторов
оператор
оператор | название | Пример |
---|---|---|
+ | добавлять | 1 + 1 |
- | уменьшать | 2 - 1 |
* | брать | 3 * 4 |
/ | Удалить | 3 / 4 |
// | Делимый (этажное деление) | 3 // 4 |
% | остаток | 3 % 4 |
** | сила | 2 ** 3 |
【пример】
print(1 + 1) # 2
print(2 - 1) # 1
print(3 * 4) # 12
print(3 / 4) # 0.75
print(3 // 4) # 0
print(3 % 4) # 3
print(2 ** 3) # 8
- оператор сравнения
оператор | название | Пример |
---|---|---|
> | больше, чем | 2 > 1 |
>= | больше или равно | 2 >= 4 |
< | меньше, чем | 1 < 2 |
<= | меньше или равно | 5 <= 2 |
== | равный | 3 == 4 |
!= | не равно | 3 != 5 |
【пример】
print(2 > 1) # True
print(2 >= 4) # False
print(1 < 2) # True
print(5 <= 2) # False
print(3 == 4) # False
print(3 != 5) # True
- Логические операторы
оператор | название | Пример |
---|---|---|
and | и | (3 > 2) and (3 < 5) |
or | или | (1 > 3) or (9 < 2) |
not | Нет | not (2 > 1) |
【пример】
print((3 > 2) and (3 < 5)) # True
print((1 > 3) or (9 < 2)) # False
print(not (2 > 1)) # False
- побитовые операторы
оператор | название | Пример |
---|---|---|
~ | побитовое отрицание | ~4 |
& | побитовое И | 4 & 5 |
` | ` | побитовое ИЛИ |
^ | Побитовое исключающее ИЛИ | 4 ^ 5 |
<< | сдвиг влево | 4 << 2 |
>> | переместить вправо | 4 >> 2 |
[Пример] Для двоичных операций см. объяснение в разделе «Битовые операции».
print(bin(4)) # 0b100
print(bin(5)) # 0b101
print(bin(~4), ~4) # -0b101 -5
print(bin(4 & 5), 4 & 5) # 0b100 4
print(bin(4 | 5), 4 | 5) # 0b101 5
print(bin(4 ^ 5), 4 ^ 5) # 0b1 1
print(bin(4 << 2), 4 << 2) # 0b10000 16
print(bin(4 >> 2), 4 >> 2) # 0b1 1
- Тернарный оператор
С условным выражением тернарного оператора вы можете использовать один оператор для выполнения вышеуказанных операций условного суждения и присваивания.
【пример】
x, y = 4, 5
small = x if x < y else y
print(small) # 4
- другие операторы
оператор | название | Пример |
---|---|---|
in | существует | 'A' in ['A', 'B', 'C'] |
not in | не существует | 'h' not in ['A', 'B', 'C'] |
is | да | "hello" is "hello" |
not is | нет | "hello" is not "hello" |
【пример】
letters = ['A', 'B', 'C']
if 'A' in letters:
print('A' + ' exists')
if 'h' not in letters:
print('h' + ' not exists')
# A exists
# h not exists
[Пример] Обе сравниваемые переменные указывают на неизменяемые типы.
a = "hello"
b = "hello"
print(a is b, a == b) # True True
print(a is not b, a != b) # False False
[Пример] Обе сравниваемые переменные указывают на типы переменных.
a = ["hello"]
b = ["hello"]
print(a is b, a == b) # False True
print(a is not b, a != b) # True False
Уведомление:
-
is, is не сравнивает адреса памяти двух переменных
-
==, != сравнить значения двух переменных
-
Две сравниваемые переменные указывают на неизменяемые типы (str и т. д.), тогда is, is и ==,! = точно эквивалентно.
-
Две сравниваемые переменные указывают на типы с переменными адресами (list, dict, tuple и т. д.), тогда между ними есть разница.
-
приоритет оператора
оператор | описывать |
---|---|
** | индекс (высший приоритет) |
~+- | Побитовое отражение, унарный плюс и минус |
* / % // | Умножать, делить, по модулю и делить) |
+ - | сложение и вычитание |
>> << | оператор сдвига вправо, оператор сдвига влево |
& | бит 'И' |
^ | побитовые операторы |
<=<>>= | оператор сравнения |
<>==!= | оператор равенства |
=%=/=//=-=+==*= | оператор присваивания |
is is not | оператор идентификации |
in not in | член оператора |
not and or | Логические операторы |
【пример】
print(-3 ** 2) # -9
print(3 ** -2) # 0.1111111111111111
print(1 << 3 + 2 & 7) # 0
print(-3 * 2 + 5 / -2 - 4) # -12.5
print(3 < 4 and 4 < 5) # True
переменные и присваивания
- Прежде чем использовать переменную, вам нужно присвоить ей значение.
- Имена переменных могут включать буквы, цифры и знаки подчеркивания, но имена переменных не могут начинаться с цифры.
- Имена переменных Python чувствительны к регистру, foo != Foo.
【пример】
teacher = "老马的程序人生"
print(teacher) # 老马的程序人生
first = 2
second = 3
third = first + second
print(third) # 5
myTeacher = "老马的程序人生"
yourTeacher = "小马的程序人生"
ourTeacher = myTeacher + ',' + yourTeacher
print(ourTeacher) # 老马的程序人生,小马的程序人生
Типы данных и преобразования
- Основные типы: целое число, число с плавающей запятой, логическое значение
- Типы контейнеров: строки, кортежи, списки, словари и наборы.
тип | название | Пример |
---|---|---|
int | Целое число | <class 'int'> -876, 10 |
float | плавающая точка | <class 'float'> 3.149, 11.11 |
bool | логический | <class 'bool'> True, False |
- Целое число
Python 2 поддерживает добавление «L» после преобразования в длинное целое число.
[Пример] Значение a можно увидеть через print(), а класс (класс) — int.
a = 1031
print(a, type(a))
# 1031 <class 'int'>
Все в Python является объектом, и целые числа не являются исключением.Пока это объект, у него есть соответствующие атрибуты и методы.
[Пример] Найдите двоичное представление целого числа и верните его длину.
a = 1031
print(bin(a)) # 0b10000000111
print(a.bit_length()) # 11
- плавающая точка
【пример】
print(1, type(1))
# 1 <class 'int'>
print(1., type(1.))
# 1.0 <class 'float'>
a = 0.00000023
b = 2.3e-7
print(a) # 2.3e-07
print(b) # 2.3e-07
Иногда мы хотим сохранить n цифр после запятой для типа с плавающей запятой. Можно использовать
decimal
сумкаDecimal
объект иgetcontext()
метод достижения.
- логический
Логическая переменная может принимать только два значения: True и False. При использовании логических переменных в числовых операциях используйте 1 и 0 для представления True и False.
【пример】
print(True + True) # 2
print(True + False) # 1
print(True * False) # 0
В дополнение к прямому назначению переменных True и False, вы также можете использовать bool(X) для создания переменных.
[Пример] bool действует на переменные базового типа: пока X не является целым числом 0 или числом с плавающей запятой 0,0, bool(X) имеет значение True, а остальные — False.
print(type(0), bool(0), bool(1))
# <class 'int'> False True
print(type(10.31), bool(0.00), bool(10.31))
# <class 'float'> False True
print(type(True), bool(False), bool(True))
# <class 'bool'> False True
Чтобы определить, является ли значение bool(X) истинным или ложным, это зависит от того, пусто ли X. Если оно пусто, оно ложно, а если оно не пусто, оно истинно.
- Для числовых переменных и 0, и 0,0 считаются пустыми.
- Для переменных-контейнеров, если в нем нет элементов, он пустой.
получить информацию о типе
Получить тип информации о типе (объект) 【пример】
print(isinstance(1, int)) # True
print(isinstance(5.2, float)) # True
print(isinstance(True, bool)) # True
print(isinstance('5.2', str)) # True
Примечание:
- type() не считает подклассы типом суперкласса, независимо от наследования.
- isinstance() будет рассматривать подкласс как тип суперкласса, учитывая отношения наследования.
Если вы хотите определить, являются ли два типа одинаковыми, рекомендуется использовать isinstance().
преобразование типов
Преобразование в целое число (x, основание = 10) Преобразуется в строку str (object = '') Преобразуется в плавающий плавающий (x) 【пример】
print(int('520')) # 520
print(int(520.52)) # 520
print(float('520.52')) # 520.52
print(float(520)) # 520.0
print(str(10 + 10)) # 20
print(str(10.1 + 5.2)) # 15.3
битовая операция
- Исходное, инверсное и дополнение
Существует три разных представления двоичного кода: исходный код, дополнительный код и дополнительный код.Компьютер использует дополнительный код для его представления.
исходный код: это его двоичное представление (обратите внимание, что есть знаковый бит).
00 00 00 11 -> 3
10 00 00 11 -> -3
дополнение: Обратный код положительного числа является исходным кодом, обратный код отрицательного числа означает, что бит знака остается неизменным, а остальные биты инвертируются (соответствует побитовой инверсии положительных чисел).
00 00 00 11 -> 3
11 11 11 00 -> -3
дополнять: Дополнением положительного числа является исходный код, а дополнением отрицательного числа является дополнение +1.
00 00 00 11 -> 3
11 11 11 01 -> -3
знаковый бит: Старший бит — это бит знака, 0 для положительных чисел и 1 для отрицательных чисел. Знаковый бит также участвует в побитовой операции.
побитовые операции
- Побитовое НЕ ~
~ 1 = 0
~ 0 = 1
~ Инвертирует все 0 и 1 в дополнении к числу (0 становится 1, 1 становится 0). Бит знака целого числа со знаком также инвертируется в операции ~.
- побитовая операция И &
1 & 1 = 1
1 & 0 = 0
0 & 1 = 0
0 & 0 = 0
1, только если оба соответствующих бита равны 1
- Побитовое ИЛИ |
1 | 1 = 1
1 | 0 = 1
0 | 1 = 1
0 | 0 = 0
1 всякий раз, когда один из двух соответствующих битов равен 1
- Побитовая операция XOR ^
1 ^ 1 = 0
1 ^ 0 = 1
0 ^ 1 = 1
0 ^ 0 = 0
1, только если два соответствующих бита различны Свойства операции XOR: выполнение коммутативных и ассоциативных законов
- Побитовая операция сдвига влево
num
00 00 10 11 -> 11
11 << 3
---
01 01 10 00 -> 88
- Побитовая операция сдвига вправо >>
num >> i сдвигает двоичное представление num на i бит вправо.
00 00 10 11 -> 11
11 >> 2
---
00 00 00 10 -> 2
Быстрые вычисления с использованием битовых операций
Используйте > для быстрого вычисления кратных 2 задач.
n << 1 -> 计算 n*2
n >> 1 -> 计算 n/2,负奇数的运算不可用
n << m -> 计算 n*(2^m),即乘以 2 的 m 次方
n >> m -> 计算 n/(2^m),即除以 2 的 m 次方
1 << n -> 2^n
Быстро поменять местами два целых числа с помощью ^. Быстро поменять местами два целых числа с помощью ^.
a ^= b
b ^= a
a ^= b
Быстро получить целое число в последней 1 позиции a с помощью & (-a) .
00 00 01 01 -> 5
&
11 11 10 11 -> -5
---
00 00 00 01 -> 1
00 00 11 10 -> 14
&
11 11 00 10 -> -14
---
00 00 00 10 -> 2
Реализация целочисленных наборов с использованием битовых операций
Двоичное представление числа можно рассматривать как набор (0 означает, что его нет в наборе, 1 означает, что он есть в наборе).
Например, набор {1, 3, 4, 8} может быть выражен как 01 00 01 10 10, а соответствующая битовая операция может рассматриваться как операция над набором.
Операции над элементами и множествами:
a | (1<<i) -> 把 i 插入到集合中
a & ~(1<<i) -> 把 i 从集合中删除
a & (1<<i) -> 判断 i 是否属于该集合(零不属于,非零属于)
Операции между наборами:
a 补 -> ~a
a 交 b -> a & b
a 并 b -> a | b
a 差 b -> a & (~b)
Примечание. Целые числа существуют в памяти в форме дополнения, и вывод, естественно, выводится в виде дополнения.
print(bin(3)) # 0b11
print(bin(-3)) # -0b11
print(bin(-3 & 0xffffffff))
# 0b11111111111111111111111111111101
print(bin(0xfffffffd))
# 0b11111111111111111111111111111101
print(0xfffffffd) # 4294967293
Насколько это подрывное познание, мы можем видеть из результатов:
- В Python bin — это отрицательное число (десятичное представление), а вывод — это двоичное представление его исходного кода плюс отрицательный знак, огромная яма.
- Целые числа в Python хранятся в форме дополнения до двух.
- Целые числа в Python имеют неограниченную длину и не могут переполняться.
Следовательно, чтобы получить дополнение отрицательного числа (десятичное представление), необходимо вручную выполнить побитовую операцию И с шестнадцатеричным числом 0xffffffff, а затем передать его в bin() для вывода, а дополнительное представление получается отрицательное число.
Условные операторы
если оператор
грамматика:
if expression:
expr_true_suit
- выражение: условное выражение
- expr_true_suit: выполнить блок кода, когда условие выражения истинно, должен быть отступ
если - иначе заявление
if expression:
expr_true_suit
else
expr_false_suit
- expr_false_suit: блок кода выполняется, когда условие выражения ложно, должен быть отступ,
else
без отступа
if - elif - еще заявление
грамматика:
if expression :
expr_true_suite
elif expression2:
expr2_true_suite
:
:
elif expressionN :
exprN_true_suite
else:
none_of_the_above_suite
пример
temp = input('请输入成绩:')
source = int(temp)
if 100 >= source >= 90:
print('A')
elif 90 > source >= 80:
print('B')
elif 80 > source >= 60:
print('C')
elif 60 > source >= 0:
print('D')
else:
print('输入错误!')
утвердить ключевое слово
Ключевое слово assert называется «утверждение».Когда условие, стоящее за этим ключевым словом, равно False, программа автоматически аварийно завершает работу и генерирует исключение AssertionError.
my_list = ['lsgogroup']
my_list.pop(0)
assert len(my_list) > 0
# AssertionError
оператор цикла
пока цикл
грамматика:
while expression:
suite_to_repeat
пример:
string = 'abcd'
while string:
print(string)
string = string[1:]
пока - иначе цикл
грамматика
while 布尔表达式:
代码块
else:
代码块
для цикла
грамматика
for 迭代变量 in 可迭代对象:
代码块
пример
dic = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
for key, value in dic.items():
print(key, value, sep=':', end=' ')
# a:1 b:2 c:3 d:4
цикл for-else
грамматика
for 迭代变量 in 可迭代对象:
代码块
else:
代码块
пример
for num in range(10, 20): # 迭代 10 到 20 之间的数字
for i in range(2, num): # 根据因子迭代
if num % i == 0: # 确定第一个因子
j = num / i # 计算第二个因子
print('%d 等于 %d * %d' % (num, i, j))
break # 跳出当前循环
else: # 循环的 else 部分
print(num, '是一个质数')
# 10 等于 2 * 5
# 11 是一个质数
# 12 等于 2 * 6
# 13 是一个质数
# 14 等于 2 * 7
# 15 等于 3 * 5
# 16 等于 2 * 8
# 17 是一个质数
# 18 等于 2 * 9
# 19 是一个质数
функция диапазона()
грамматика
range([start,] stop[, step=1])
- Этот BIF (встроенные функции) имеет три параметра, два из которых заключены в квадратные скобки, чтобы указать, что эти два параметра являются необязательными.
- step=1 означает, что значение третьего параметра по умолчанию равно 1.
- Роль диапазона BIF состоит в том, чтобы генерировать последовательность чисел, начинающуюся со значения параметра start и заканчивающуюся значением параметра stop, причем последовательность содержит значение start, но не значение stop.
пример
for i in range(2, 9): # 不包含9
print(i)
# 2
# 3
# 4
# 5
# 6
# 7
# 8
функция перечислить()
грамматика
enumerate(sequence, [start=0])
- последовательность: последовательность, итератор или другой объект, поддерживающий итерацию.
- start: начальная позиция нижнего индекса.
- Возвращает объект enumerate(enum)
пример
seasons = ['Spring', 'Summer', 'Fall', 'Winter']
lst = list(enumerate(seasons))
print(lst)
# [(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]
lst = list(enumerate(seasons, start=1)) # 下标从 1 开始
print(lst)
# [(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]
- Используйте enumerate() в сочетании с циклом for.
for i, a in enumerate(A)
do something with a
Использование enumerate(A) не только возвращает элемент в A, но также дает элементу значение индекса (начиная с 0 по умолчанию). Кроме того, используйте enumerate(A, j), чтобы определить начальное значение индекса в j. пример
languages = ['Python', 'R', 'Matlab', 'C++']
for language in languages:
print('I love', language)
print('Done!')
# I love Python
# I love R
# I love Matlab
# I love C++
# Done!
for i, language in enumerate(languages, 2):
print(i, 'I love', language)
print('Done!')
# 2 I love Python
# 3 I love R
# 4 I love Matlab
# 5 I love C++
# Done!
Выявление переключения
Оператор break может выйти из цикла на текущем уровне.
продолжить заявление
продолжить завершить текущий цикл и начать следующий цикл
заявление о пропуске
Оператор pass означает "ничего не делать". Если вы не напишете какой-либо оператор там, где требуется оператор, интерпретатор выдаст сообщение об ошибке, и для решения этих проблем используется оператор pass.
def a_func():
pass
pass — пустой оператор, который ничего не делает, а действует только как заполнитель, его функция — поддерживать целостность структуры программы. Хотя оператор pass ничего не делает, если вы временно не знаете, какой код поместить в место, вы можете сначала поместить оператор pass и позволить коду работать нормально.
Вывод
- понимание списка
[ expr for value in collection [if condition] ]
пример
x = [-4, -2, 0, 2, 4]
y = [a * 2 for a in x]
print(y)
# [-8, -4, 0, 4, 8]
- понимание кортежа
( expr for value in collection [if condition] )
пример
a = (x for x in range(10))
print(a)
# <generator object <genexpr> at 0x0000025BE511CC48>
print(tuple(a))
# (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
- понимание словаря
{ key_expr: value_expr for value in collection [if condition] }
пример
b = {i: i % 2 == 0 for i in range(10) if i % 3 == 0}
print(b)
# {0: True, 3: False, 6: True, 9: False}
- установить понимание
{ expr for value in collection [if condition] }
пример
c = {i for i in [1, 2, 3, 4, 5, 5, 6, 4, 3, 2, 1]}
print(c)
# {1, 2, 3, 4, 5, 6}
- разное
next(iterator[, default])
пример
e = (i for i in range(10))
print(e)
# <generator object <genexpr> at 0x0000007A0B8D01B0>
print(next(e)) # 0
print(next(e)) # 1
for each in e:
print(each, end=' ')
# 2 3 4 5 6 7 8 9
Обработка исключений
Исключения — это ошибки, обнаруженные во время выполнения. Компьютерный язык определяет типы исключений для возможных ошибок.Когда определенная ошибка вызывает соответствующее исключение, обработчик исключений будет активирован для восстановления нормальной работы программы.
Сводка стандартных исключений Python
- BaseException: базовый класс для всех исключений
- Исключение: базовый класс для обычных исключений
- StandardError: базовый класс для всех встроенных стандартных исключений.
- ArithmeticError: базовый класс для всех исключений числовых вычислений.
- FloatingPointError: исключение вычисления с плавающей запятой
- OverflowError: Числовая операция превышает максимальный предел
- ZeroDivisionError: деление на ноль
- AssertionError: Ошибка оператора утверждения (assert)
- AttributeError: попытка доступа к неизвестному атрибуту объекта
- EOFError: нет встроенного ввода, достигнут маркер EOF
- EnvironmentError: базовый класс для исключений операционной системы.
- IOError: операция ввода/вывода не удалась
- OSError: Исключение, созданное операционной системой (например, открытие несуществующего файла)
- WindowsError: системный вызов не удался
- ImportError: при сбое импорта модуля
- KeyboardInterrupt: пользователь прерывает выполнение
- LookupError: базовый класс для недопустимого запроса данных
- IndexError: индекс вне диапазона для последовательности
- KeyError: поиск несуществующего ключа в словаре
- MemoryError: переполнение памяти (память можно освободить, удалив объекты)
- NameError: попытка доступа к несуществующей переменной
- UnboundLocalError: доступ к неинициализированной локальной переменной
- ReferenceError: слабые ссылки пытались получить доступ к объектной сборке мусора
- RuntimeError: общее исключение времени выполнения
- NotImplementedError: метод еще не реализован
- SyntaxError: исключение, вызванное синтаксической ошибкой
- IndentationError: исключение, вызванное ошибками отступа
- TabError: смешивание табуляции и пробела
- SystemError: общее системное исключение интерпретатора
- TypeError: недопустимая операция между разными типами
- ValueError: передан неверный параметр
- UnicodeError: исключение, связанное с Unicode
- UnicodeDecodeError: исключение при декодировании Unicode
- UnicodeEncodeError: Исключение, вызванное ошибкой кодирования Unicode
- UnicodeTranslateError: Исключение, вызванное ошибкой преобразования Unicode
Сводка стандартных предупреждений Python
- Предупреждение: базовый класс для предупреждений
- DeprecationWarning: предупреждение об устаревших функциях
- FutureWarning: предупреждение о том, что семантика конструируемого будущего изменится
- UserWarning: предупреждение, созданное кодом пользователя
- PendingDeprecationWarning: предупреждение о том, что функция будет объявлена устаревшей.
- RuntimeWarning: предупреждение о подозрительном поведении во время выполнения.
- SyntaxWarning: Предупреждение о подозрительном синтаксисе
- ImportWarning: для предупреждений, которые срабатывают при импорте модулей.
- UnicodeWarning: предупреждения, связанные с Unicode
- BytesWarning: предупреждения, связанные с байтами или байт-кодами.
- ResourceWarning: предупреждения, связанные с использованием ресурсов.
попытка - кроме заявления
грамматика
try:
检测范围
except Exception[as reason]:
出现异常后的处理代码
Оператор ry работает следующим образом:
- Во-первых, выполняется предложение try (оператор между ключевым словом try и ключевым словом кроме)
- Если исключения не возникает, предложение exclude игнорируется и выполняется предложение try.
- Если во время выполнения предложения try возникает исключение, оставшаяся часть предложения try игнорируется. Если тип исключения соответствует имени после исключения, будет выполнено соответствующее предложение исключения. Код после оператора try-except наконец выполняется.
- Если исключение не соответствует ни одному исключению, то исключение будет передано в верхнюю попытку.
try:
f = open('test.txt')
print(f.read())
f.close()
except OSError as error:
print('打开文件出错\n原因是:' + str(error))
# 打开文件出错
# 原因是:[Errno 2] No such file or directory: 'test.txt'
Оператор try может содержать несколько исключений, каждое из которых предназначено для обработки разных конкретных исключений. Будет выполнена не более одной ветки
try:
int("abc")
s = 1 + '1'
f = open('test.txt')
print(f.read())
f.close()
except OSError as error:
print('打开文件出错\n原因是:' + str(error))
except TypeError as error:
print('类型出错\n原因是:' + str(error))
except ValueError as error:
print('数值出错\n原因是:' + str(error))
# 数值出错
# 原因是:invalid literal for int() with base 10: 'abc'
Оператор try-except-else пытается запросить пару ключ-значение, которой нет в словаре, тем самым вызывая исключение. Это исключение должно точно принадлежать KeyError, но поскольку KeyError является подклассом LookupError, а LookupError помещается перед KeyError, поэтому программа сначала выполняет блок кода исключения. Таким образом, при использовании нескольких блоков исключений вы должны придерживаться порядка их спецификаций, от наиболее конкретных к наиболее общим.
dict1 = {'a': 1, 'b': 2, 'v': 22}
try:
x = dict1['y']
except KeyError:
print('键错误')
except LookupError:
print('查询错误')
else:
print(x)
# 键错误
Предложение exclude может обрабатывать несколько исключений одновременно, эти исключения будут помещены в кортеж в круглых скобках.
try:
s = 1 + '1'
int("abc")
f = open('test.txt')
print(f.read())
f.close()
except (OSError, TypeError, ValueError) as error:
print('出错了!\n原因是:' + str(error))
# 出错了!
# 原因是:unsupported operand type(s) for +: 'int' and 'str'
оператор try-except-finally
try: область обнаружения, кроме Exception[as Reason]: обработка кода после возникновения исключения finally: код, который будет выполняться в любом случае
Предложение finally выполняется независимо от того, возникает ли исключение в предложении try.
Пример. Если в предложении try выдается исключение, а кроме него нет возможности его перехватить, то исключение будет выброшено после выполнения предложения finally.
def divide(x, y):
try:
result = x / y
print("result is", result)
except ZeroDivisionError:
print("division by zero!")
finally:
print("executing finally clause")
divide(2, 1)
# result is 2.0
# executing finally clause
divide(2, 0)
# division by zero!
# executing finally clause
divide("2", "1")
# executing finally clause
# TypeError: unsupported operand type(s) for /: 'str' and 'str'
оператор try-except-else
Если при выполнении предложения try не возникает исключения, Python выполняет оператор, следующий за оператором else.
try:
检测范围
except:
出现异常后的处理代码
else:
如果没有异常执行这块代码
Использование исключения без какого-либо типа исключения не является хорошим способом, мы не можем определить конкретную информацию об исключении с помощью этой программы, потому что она перехватывает все исключения.
try: диапазон обнаружения кроме(Exception1[ Exception2[...ExceptionN]]]): если возникает одно из вышеперечисленных исключений, выполнить этот код else: если исключения нет, выполнить этот код
try:
fh = open("testfile.txt", "w")
fh.write("这是一个测试文件,用于测试异常!!")
except IOError:
print("Error: 没有找到文件或读取文件失败")
else:
print("内容写入文件成功")
fh.close()
# 内容写入文件成功
Примечание: Существование оператора else должно основываться на существовании оператора exclude.Использование оператора else в операторе try без оператора exclude вызовет синтаксическую ошибку.
выражение повышения
Оператор повышения выдает указанное исключение
try:
raise NameError('HiThere')
except NameError:
print('An exception flew by!')
# An exception flew by!