С Новым годом! Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 03.01.2024
Сообщений: 14

Не работает и выходит исключение

08.01.2024, 15:46. Показов 618. Ответов 6

Студворк — интернет-сервис помощи студентам
Дан пример кода. При запуске в КС Windows сразу выходит исключение, клиенты не подключаются. Помогите понять в чем проблема?
Python
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
import argparse
import socket
# Стандартный модуль socket.
# Подробнее: https://docs.python.org/3/library/socket.html
import sys
# Стандартный модуль sys.
# Подробнее: https://docs.python.org/3/library/sys.html
import time
# Стандартный модуль time.
# Подробнее: https://docs.python.org/3/library/time.html
import json
# Стандартный модуль json.
# Подробнее: https://docs.python.org/3/library/json.html
import threading
# Стандартный модуль threading.
# Подробнее: https://docs.python.org/3/library/threading.html
 
# Глобальная переменная, отвечающая за остановку клиента.
shutdown = False
 
 
class Message:
   """
       Класс-Сообщение. Представляет сообщения,
       которые будут приходить от клиентов.
   """
 
   def __init__(self, **data):
       # Устанавливаем дополнительные атрибуты сообщения.
       self.status = 'online'
       if 'join' not in data:
           self.join = False
 
       # Распаковываем кортеж именованных аргументов в параметры класса.
       # Паттерн Builder
       for param, value in data.items():
           setattr(self, param, value)
 
       # время получения сообщения:
       self.curr_time = time.strftime("%Y-%m-%d-%H.%M.%S",
                                      time.localtime())
 
   def to_json(self):
       """
           Возвращает атрибуты класса и их значения в виде json.
           Использует стандартный модуль python - json.
       """
       return json.dumps(self, default=lambda o: o.__dict__, sort_keys=True,
                         indent=4)
class P2PClient:
   """
   Класс с "бизнес-логикой" p2p клиента.
   """
 
   def __init__(self, host, port, name=None):
       # Атрибут для хранения текущего соединения:
       self.current_connection = None
       # Атрибут для хранения адреса текущего клиента
       self.client_address = (host, port)
 
       # Если имя не задано, то в качестве имени сохраняем адрес клиента:
       if name is None:
           self.name = f"{host[0]}:{port[1]}"
       else:
           self.name = name
       # Создаем сокет, как это делали в предыдущей работе:
       self.socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
       self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
       # Запускаем "прослушивание" указанного адреса:
       self.socket.bind(self.client_address)
 
   def receive(self):
       """
       Получает сообщение из сокета и выводит полученное сообщение
       в стандартный поток вывода (консоль)
       """
       global shutdown
       # Пока клиент не остановлен
       while not shutdown:
           try:
               # Получаем данные и адрес отправителя
               data, addr = self.socket.recvfrom(1024)
               data = dict(json.loads(data.decode('utf-8')))
               # Создаем объект сообщения из полученных данных:
               message = Message(**data)
               # Выводим сообщение в консоль:
               sender_name = getattr(message, 'sender_name', str(addr))
               text = getattr(message, 'message', '')
               sys.stdout.write(f'@{sender_name}: {text}\n')
               # Делаем небольшую задержку для уменьшения нагрузки:
               time.sleep(0.2)
           except socket.error as ex:
               # Если возникли проблемы с соединением, завершаем программу.
               print(f"P2PClient.receive: Что-то пошло не так: {ex}")
               shutdown = True
       self.socket.close()
 
   def send(self):
       """
       Принимает сообщение из потока ввода консоли и посылает его на сервер.
       """
       global shutdown
       # Пока клиент не остановлен
       while not shutdown:
           # Ожидаем ввод данных
           input_data = input()
           if input_data:
               # Создаем объект сообщения из введенных данных:
               message = Message(message=input_data,
                                 sender_name=self.name)
               # Отправляем данные:
               data = message.to_json()
               try:
                   self.socket.sendto(data.encode('utf-8'),
                                      self.current_connection)
               except socket.error as ex:
                   self.current_connection = None
                   self.send()
           time.sleep(0.2)
 
   def connect(self):
       """
       "Соединяет" с другим P2P клиентом.
       Сохраняет заданное подключение и посылает клиенту сообщение.
       """
       # Пока клиент не остановлен и соединение не задано
       while not shutdown and not self.current_connection:
           # Вводим, куда подключаться:
           connect_data = input("Connect to (ip:port, like 127.0.0.1:8001):")
           try:
               # Приводим введенные данные к нужному виду (str, int).
               ip, port = connect_data.split(":")
               port = int(port)
               # Отправка сообщения о подключении:
               connect_message = Message(
                   message=f'User @{self.name} wants to chat with you.\n',
                   sender_name=self.name
               )
               data = connect_message.to_json()
               self.current_connection = (ip, port)
               self.socket.sendto(data.encode('utf-8'),
                                  self.current_connection)
           except (ValueError, TypeError, AttributeError, socket.error) as ex:
               print(f"Не удается соединиться с {connect_data}, "
                     f"по причине: {ex}.\nПопробуйте снова.")
               self.current_connection = None
 
   def run(self):
       """
       Запускает работу P2P клиента.
       """
       self.connect()
       # В отдельном потоке вызываем обработку получения сообщений:
       recv_thread = threading.Thread(target=self.receive)
       recv_thread.start()
       # В главном потоке вызываем обработку отправки сообщений:
       self.send()
       # Прикрепляем поток с обработкой получения сообщений к главному потоку:
       recv_thread.join()
 
if __name__ == '__main__':
   # Задаем настройки распознавания параметров запуска используя argparse:
   parser = argparse.ArgumentParser()
   parser.add_argument("-ho", "--host",
                       help="p2p client host ip address, like 127.0.0.1")
   parser.add_argument("-p", "--port",
                       help="p2p client host port, like 8001")
   args = parser.parse_args()
 
try:
       # Устанавливаем параметры P2P клиента
       host = args.host
       port = int(args.port)
       name = input("Name: ").strip()
       # Создаем объект P2P клиента
       p2p_client = P2PClient(host, port, name=name)
       # Запускаем P2P клиента
       p2p_client.run()
except (TypeError, ValueError):
       print("Incorrect arguments values, use --help/-h for more info.")
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.01.2024, 15:46
Ответы с готовыми решениями:

Почему исключение выходит при любом вводе?
Нужно чтобы выходило только если пробелов нет if (textBox22output.Text.Contains(' ') == false) { ...

Как начинать функцию заново, если выходит исключение?
def on_pushButton_pressed(self): _translate = QtCore.QCoreApplication.translate x = self.lineEdit.text() ...

Не открывая VisualStudio выходит ошибка необработанное исключение system.io.filenotfoundexception
Выводит ошибку, не открывая visual studio в чем проблема? Ошибка "необработанное исключение system.io.filenotfoundexception произошло в...

6
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,664
Записей в блоге: 29
08.01.2024, 17:10
Цитата Сообщение от Katherine_B Посмотреть сообщение
При запуске в КС Windows сразу выходит исключение
что такое КС? исключение выводит секретное, его нельзя сообщить?
0
0 / 0 / 0
Регистрация: 03.01.2024
Сообщений: 14
08.01.2024, 17:30  [ТС]
Welemir1, при запуске в командной строке (кс) выходит сразу исключение: Incorrect arguments values, use --help/-h for more info.
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,664
Записей в блоге: 29
08.01.2024, 17:47
Цитата Сообщение от Katherine_B Посмотреть сообщение
выходит сразу исключение: Incorrect arguments values, use --help/-h for more info.
но вы же сами перехватили исключения и так обработали? или код не ваш?

можно например убрать трай-ексепт и почитать внимательно что упадет, там будут подробности. Может не передаете нужные аргументы?
0
0 / 0 / 0
Регистрация: 03.01.2024
Сообщений: 14
08.01.2024, 17:48  [ТС]
Welemir1,
Цитата Сообщение от Katherine_B Посмотреть сообщение
Дан пример кода.
Да, не мой, пытаюсь разобраться как писать подобное и решила его проверить, а он чет не выводит как надо))
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,664
Записей в блоге: 29
08.01.2024, 17:52
Katherine_B, я бы вам советовал взять пример из документации питона по сокетам, там и короче и рабочий. С этим кодом надо проверять, в том числе сообщите как и с какими аргументами вы запускаете
1
0 / 0 / 0
Регистрация: 03.01.2024
Сообщений: 14
08.01.2024, 17:53  [ТС]
Welemir1, посмотрю, спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.01.2024, 17:53
Помогаю со студенческими работами здесь

Почему массовое определение свойств объекта window работает, а для иных объектов такое не выходит, не работает?
можно записать: = ; и у объекта window появятся два новых определённых (имеющих значения) свойства: window.a = 1 и window.b = 2 если же...

FTP соединение: при попытке захода на FTP сервер выходит исключение WebException
задача написать клиент для соединения с FTP сервером, при попытке соединения на сервер без требования учетных данных, то есть anonimous,...

Выходит исключение System.NullReferenceException: "Ссылка на объект не указывает на экземпляр объекта."
Как исправить и что не так? Уже все перепробовал и программа не запускается. Вот код using System; using...

При создании проекта выходит ошибка: "Выдано исключение типа "System.Exception"
Захотел начать программировать на C# Установил MS Visual Studio без дополнительных загрузок, и, при попытке создать проект, выходит...

WiFi работает, но не выходит в интернет
Всем добрый вечер! Подскажите кто сможет. История значит такая, через WiFi ноутбук в интернет не выходит и определяет только локальную...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru