Код: Выделить всё
import os
import glob
import re
class ClassInfo():
pass
def read_busclass_files():
pattern = os.path.join(os.path.dirname(__file__), "*.txt")
matching_files = glob.glob(pattern)
re_block_with_rules = re.compile(r"( {0,3}\t| {4})(Audit Entry Rules|Field Rules|Commit Rules|Create Rules|Create Exit Rules|Delete Rules|Attach Rules|Translation Field Rules|Apply Pending Effective Rules|Translation Rules|Action Exit Rules|Parent Attach Rules|Dynamic Creation Rules)\s*(\/\/.*)?$")
re_relations = re.compile(r"( {0,3}\t| {4})Relations\s*(\/\/.*)?$")
re_actions = re.compile(r"( {0,3}\t| {4})Actions\s*(\/\/.*)?$")
re_class_name = re.compile(r"(\w+)\s+is a BusinessClass\s*(\/\/.*)?$")
class_map: dict[str, ClassInfo] = {}
# Read each file
for file_path in matching_files:
try:
line_num = 0
action_info = None
class_name = None
action_name = None
with open(file_path, 'r') as f:
while True:
line = f.readline()
if not line:
break
line_num += 1
if len(line.strip()) == 0:
continue
line = line.rstrip()
if class_name is None:
class_name = re_class_name.match(line).group(1) if re_class_name.match(line) else "bad"
if class_name not in class_map:
class_map[class_name] = ClassInfo()
continue
if re_block_with_rules.match(line):
read_state = 1
for_each_nested = []
continue
if re_relations.match(line):
read_state = 2
continue
if re_actions.match(line):
read_state = 4
continue
if (action_info is not None):
class_map[class_name].actions[action_name] = action_info
except IOError as e:
print(f"Error reading file {file_path}: {e}")
return class_map
def main():
class_map = read_busclass_files()
return 0
if __name__ == "__main__":
exit(main())
Код: Выделить всё
AbsenceCalculation is a BusinessClass
Relations
AbsenceTableDetailRel is an AbsenceTableDetail set //Used in Computation field for edits
Когда я запускаю сценарий без каких-либо точек останова, все в порядке. (Если я добавлю строку для отчета sys.version, она сообщит версию Python: 3.12.0 (tags/v3.12.0:0fb18b0, 2 октября 2023 г., 13:03:39) [MSC v.1935 64 бит (AMD64)] ).
Когда я запускаю сценарий в отладчике VS Code Python с точкой останова в if (action_info не имеет значения None):, выполнение прерывается на строке for с этой ошибкой:
Код: Выделить всё
Exception has occurred: TypeError
an integer is required
File "C:\landmark\ox1\src\hcm\scripts\tmp.py", line 29, in read_busclass_files
for file_path in matching_files:
File "C:\landmark\ox1\src\hcm\scripts\tmp.py", line 70, in main
class_map = read_busclass_files()
^^^^^^^^^^^^^^^^^^^^^
File "C:\landmark\ox1\src\hcm\scripts\tmp.py", line 74, in
exit(main())
^^^^^^
TypeError: an integer is required
Подробнее здесь: https://stackoverflow.com/questions/791 ... h-if-block
Мобильная версия