rupython 1.1.3__tar.gz → 1.1.5__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: rupython
3
- Version: 1.1.3
3
+ Version: 1.1.5
4
4
  Summary: Исполнитель кода Русского Питона
5
5
  Description-Content-Type: text/markdown
6
6
  License-File: LICENSE
@@ -4,6 +4,7 @@ import traceback as Разборщик_исключений
4
4
  import os as ОС
5
5
  import sys as Система
6
6
  import importlib as Импортование
7
+ import re as РегВыр
7
8
 
8
9
  Служебные_слова = {
9
10
  'Да': 'True',
@@ -50,7 +51,7 @@ import importlib as Импортование
50
51
  }
51
52
 
52
53
  Встроенные_функции = {
53
- 'АбсЗнач': ( 'abs', None, False ),
54
+ 'АбсЗнач': ( 'abs', None, False ), # Модуль
54
55
  'АсинхрПеребиратель': ( 'aiter', None, False ),
55
56
  'АсСледующий': ( 'anext', None, False ),
56
57
  'БайтМассив': ( 'bytearray', { 'источник': 'source', 'кодование': 'encoding', 'при_ошибках': 'errors' }, True ),
@@ -306,6 +307,7 @@ import importlib as Импортование
306
307
  'ОшибкаЗакодСимволов': 'UnicodeEncodeError',
307
308
  'ОшибкаРаскодСимволов': 'UnicodeDecodeError',
308
309
  'ОшибкаПереводаКодСимв': 'UnicodeTranslateError',
310
+ 'ОшибкаТокена': 'TokenError',
309
311
  'ОбщееПредупреждение': 'Warning',
310
312
  'ПредупрУстаревание': 'DeprecationWarning',
311
313
  'ПредупрОжидаетсяУстаревание': 'PendingDeprecationWarning',
@@ -457,7 +459,7 @@ def Проверить_соответствие_слов(слова, путь_к
457
459
  Циклы_со_счётчиком = []
458
460
 
459
461
  def Преобразовать_код(путь_к_файлу):
460
- файл = open(путь_к_файлу, encoding='utf-8')
462
+ файл = open(путь_к_файлу, 'r', encoding='utf-8')
461
463
  if (not файл):
462
464
  искл = SyntaxError('Невозможно открыть файл "' + файл + '".')
463
465
  Вывести_текст_исключения(искл, 'при чтении кода', путь_к_файлу)
@@ -605,6 +607,41 @@ def Преобразовать_код(путь_к_файлу):
605
607
 
606
608
  return исходник
607
609
 
610
+ def Посчитать_физические_строки(путь_к_файлу, логическая_строка):
611
+ try:
612
+ физические_строки = 0
613
+ текущая_логическая = 0
614
+ with open(путь_к_файлу, 'r', encoding='utf-8') as файл:
615
+ продолжение = False
616
+ for строка in файл:
617
+ физические_строки += 1
618
+ строка = строка.rstrip('\n')
619
+ if not продолжение: текущая_логическая += 1
620
+ продолжение = строка.endswith('\\')
621
+ if текущая_логическая >= логическая_строка:
622
+ return физические_строки
623
+ return физические_строки
624
+ except:
625
+ return логическая_строка
626
+
627
+ Переводы_ошибок = {
628
+ r'.*EOF in multi-line statement.*': r'Неожиданный конец файла при обработке многострочной инструкции.',
629
+ r'name "(\w+)" is not defined': r'Переменная "\1" не определена.',
630
+ r'unsupported operand type\(s\) for .+: "(\w+)" and "(\w+)"': r'Неподдерживаемая операция между типами "\1" и "\2".',
631
+ r'invalid literal for int\(\) with base \d+: "(.+)"': r'Недопустимое значение "\1" для преобразования в целое число.',
632
+ r'division by zero': r'Деление на ноль.',
633
+ r'list index out of range': r'Индекс за пределами списка.',
634
+ r'"(\w+)" object has no attribute "(\w+)"': r'Объект типа "\1" не имеет атрибута "\2".',
635
+ r'module "(\w+)" has no attribute "(\w+)"': r'Модуль "\1" не имеет атрибута "\2".',
636
+ r'cannot import name "(\w+)" from "(\w+)"': r'Не удалось импортовать "\1" из модуля "\2".',
637
+ r'no such file or directory: "(.+)"': r'Файл или директория "\1" не найдены.',
638
+ r'index (\d+) is out of range': r'Индекс \1 вне допустимого диапазона.',
639
+ r'key "(\w+)" not found': r'Ключ "\1" не найден.',
640
+ r'invalid syntax': r'Синтаксическая ошибка.',
641
+ r'expected .+, got .+': r'Ожидался один тип данных, получен другой.',
642
+ r'int\(\) argument must be a string, a bytes-like object or a number, not "(\w+)"': r'Аргумент Цел() должен быть строкой, байтовым объектом или числом, а не "\1".'
643
+ }
644
+
608
645
  def Вывести_текст_исключения(исключение, заголовок, путь_к_файлу):
609
646
  назв_исп_ф = путь_к_файлу.split('\\' if Система.platform.startswith('win32') else '/')[-1]
610
647
  сч = 1
@@ -624,6 +661,9 @@ def Вывести_текст_исключения(исключение, заг
624
661
  try: номер_строки = исключение.lineno - 2
625
662
  except: номер_строки = 0
626
663
 
664
+ if номер_строки > 0:
665
+ номер_строки = Посчитать_физические_строки(путь_к_файлу, номер_строки)
666
+
627
667
  выч_стр = 0
628
668
  for ц in Циклы_со_счётчиком:
629
669
  if номер_строки > ц[1] + 1: выч_стр += 2;
@@ -637,8 +677,14 @@ def Вывести_текст_исключения(исключение, заг
637
677
  print(' в файле "' + путь_к_файлу + '"' + ('.\n' if номер_строки == 0 else ''))
638
678
  if номер_строки > 0:
639
679
  print(' на строке № ' + str(номер_строки) + '.\n');
640
- try: print(' ' + исключение.msg)
641
- except: print(' ' + str(исключение))
680
+ try: текст_исключения = исключение.msg
681
+ except AttributeError: текст_исключения = str(исключение)
682
+
683
+ for шаблон, перевод in Переводы_ошибок.items():
684
+ if РегВыр.match(шаблон, текст_исключения):
685
+ текст_исключения = РегВыр.sub(шаблон, перевод, текст_исключения)
686
+ break
687
+ print(' ' + str(текст_исключения))
642
688
 
643
689
  input()
644
690
  Система.exit()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: rupython
3
- Version: 1.1.3
3
+ Version: 1.1.5
4
4
  Summary: Исполнитель кода Русского Питона
5
5
  Description-Content-Type: text/markdown
6
6
  License-File: LICENSE
@@ -3,7 +3,7 @@ from pathlib import Path as Путь
3
3
 
4
4
  Установить(
5
5
  name = 'rupython',
6
- version = '1.1.3',
6
+ version = '1.1.5',
7
7
  description = "Исполнитель кода Русского Питона",
8
8
  packages = [ 'rupython', 'rupython.Модули' ],
9
9
  long_description = (Путь(__file__).parent / "README.md").read_text("UTF-8"),
File without changes
File without changes
File without changes
File without changes