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.
- {rupython-1.1.3 → rupython-1.1.5}/PKG-INFO +1 -1
- {rupython-1.1.3 → rupython-1.1.5}/rupython//320/237/321/200/320/265/320/276/320/261/321/200/320/260/320/267/320/276/320/262/320/260/321/202/320/265/320/273/321/214.py +50 -4
- {rupython-1.1.3 → rupython-1.1.5}/rupython.egg-info/PKG-INFO +1 -1
- {rupython-1.1.3 → rupython-1.1.5}/setup.py +1 -1
- {rupython-1.1.3 → rupython-1.1.5}/LICENSE +0 -0
- {rupython-1.1.3 → rupython-1.1.5}/README.md +0 -0
- {rupython-1.1.3 → rupython-1.1.5}/rupython/__main__.py +0 -0
- {rupython-1.1.3 → rupython-1.1.5}/rupython/__/320/227/320/260/320/263/320/276/320/273/320/276/320/262/320/276/321/207/320/275/321/213/320/271_/320/272/320/276/320/264__.py" +0 -0
- {rupython-1.1.3 → rupython-1.1.5}/rupython//320/234/320/276/320/264/321/203/320/273/320/270//320/234/320/260/321/202/320/265/320/274.py" +0 -0
- {rupython-1.1.3 → rupython-1.1.5}/rupython//320/234/320/276/320/264/321/203/320/273/320/270//320/240/320/265/320/263/320/222/321/213/321/200.py" +0 -0
- {rupython-1.1.3 → rupython-1.1.5}/rupython//320/234/320/276/320/264/321/203/320/273/320/270//320/241/320/273/321/203/321/207.py" +0 -0
- {rupython-1.1.3 → rupython-1.1.5}/rupython.egg-info/SOURCES.txt +0 -0
- {rupython-1.1.3 → rupython-1.1.5}/rupython.egg-info/dependency_links.txt +0 -0
- {rupython-1.1.3 → rupython-1.1.5}/rupython.egg-info/top_level.txt +0 -0
- {rupython-1.1.3 → rupython-1.1.5}/setup.cfg +0 -0
@@ -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:
|
641
|
-
except:
|
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()
|
@@ -3,7 +3,7 @@ from pathlib import Path as Путь
|
|
3
3
|
|
4
4
|
Установить(
|
5
5
|
name = 'rupython',
|
6
|
-
version = '1.1.
|
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
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|