2601회 채점기준 수정
This commit is contained in:
@@ -50,10 +50,10 @@ def copy_ent_files(source_root, target_root):
|
||||
# source_directory = r"D:\project\data\CAS_제2510회 정기\제2510회 코딩활용능력 2급 정기 답안파일" # 원본 디렉토리 경로
|
||||
|
||||
# test_name = "2512_CAS_2_A"
|
||||
test_name = "2512_CAS_2_B"
|
||||
test_name = "2601_CAT_3_A"
|
||||
|
||||
# source_directory = r"D:\project\data\CAT_제2511회 정기\답안파일" # 원본 디렉토리 경로
|
||||
source_directory = r"D:\project\data\제2512회 정기_CAS\CAS\B형" # 원본 디렉토리 경로
|
||||
source_directory = r"D:\project\data\CAT_제2601회 정기\CAT_제2601회 정기\CAT_답안파일" # 원본 디렉토리 경로
|
||||
target_directory = rf".\ent\{test_name}" # 타겟 디렉토리 경로
|
||||
|
||||
copy_ent_files(source_directory, target_directory)
|
||||
|
||||
@@ -50,8 +50,8 @@ def process_ent_files(ent_dir, output_dir):
|
||||
|
||||
# 실행 예
|
||||
if __name__ == "__main__":
|
||||
# test_names = ["2509_CAT_3_A"]
|
||||
test_names = ["2512_CAS_2_A", "2512_CAS_2_B"]
|
||||
test_names = ["2601_CAT_3_A"]
|
||||
# test_names = ["2512_CAS_2_A", "2512_CAS_2_B"]
|
||||
for test_name in test_names:
|
||||
ent_dir = f".\\ent\\{test_name}"
|
||||
output_dir = f".\\output\\{test_name}"
|
||||
|
||||
Binary file not shown.
BIN
260129_2512_CAS_2_B_TEST.xlsx
Normal file
BIN
260129_2512_CAS_2_B_TEST.xlsx
Normal file
Binary file not shown.
Binary file not shown.
@@ -392,13 +392,13 @@
|
||||
{
|
||||
"ele": [
|
||||
"$[1][1].type",
|
||||
"$[1][1].params[0].params[0].params[3]",
|
||||
"$[1][1].params[0].params[1]",
|
||||
"$[1][1].params[0].type",
|
||||
"$[1][1].params[0].params[2].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"repeat_while_true",
|
||||
null,
|
||||
"$..objects[?(@.name=='놀이동산')].id",
|
||||
"reach_something",
|
||||
null
|
||||
],
|
||||
@@ -435,13 +435,13 @@
|
||||
{
|
||||
"ele": [
|
||||
"$[1][2].type",
|
||||
"$[1][2].params[0].params[0].params[3]",
|
||||
"$[1][2].params[0].params[1]",
|
||||
"$[1][2].params[0].type",
|
||||
"$[1][2].params[0].params[2].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"repeat_while_true",
|
||||
null,
|
||||
"$..objects[?(@.name=='백화점')].id",
|
||||
"reach_something",
|
||||
null
|
||||
],
|
||||
@@ -516,13 +516,13 @@
|
||||
{
|
||||
"ele": [
|
||||
"$[2][1].type",
|
||||
"$[2][1].params[0].params[0].params[3]",
|
||||
"$[2][1].params[0].params[1]",
|
||||
"$[2][1].params[0].type",
|
||||
"$[2][1].params[0].params[2].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"repeat_while_true",
|
||||
null,
|
||||
"$..objects[?(@.name=='백화점')].id",
|
||||
"reach_something",
|
||||
null
|
||||
],
|
||||
@@ -559,13 +559,13 @@
|
||||
{
|
||||
"ele": [
|
||||
"$[2][2].type",
|
||||
"$[2][2].params[0].params[0].params[3]",
|
||||
"$[2][2].params[0].params[1]",
|
||||
"$[2][2].params[0].type",
|
||||
"$[2][2].params[0].params[2].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"repeat_while_true",
|
||||
null,
|
||||
"$..objects[?(@.name=='놀이동산')].id",
|
||||
"reach_something",
|
||||
null
|
||||
],
|
||||
|
||||
498
correct/2601_CAT_3_A.json
Normal file
498
correct/2601_CAT_3_A.json
Normal file
@@ -0,0 +1,498 @@
|
||||
{
|
||||
"1-1": {
|
||||
"type": "scene",
|
||||
"ele": "$..objects[?(@.name=='약도')]",
|
||||
"point": 2,
|
||||
"desc": "문제 1/약도/[배경] 이름 설정/이름 변경 없음",
|
||||
"sort": 11
|
||||
},
|
||||
"1-3": {
|
||||
"type": "scene",
|
||||
"ele": "$..objects[?(@.name=='놀이동산')]",
|
||||
"point": 2,
|
||||
"desc": "문제 1/놀이동산(4)/[개체] 이름 설정 1/이름을 '놀이동산'으로 변경하기",
|
||||
"sort": 13
|
||||
},
|
||||
"1-4": {
|
||||
"type": "scene",
|
||||
"ele": "$..objects[?(@.name=='백화점')]",
|
||||
"point": 2,
|
||||
"desc": "문제 1/건물(6)/[개체] 이름 설정 2/이름을 '백화점'으로 변경하기",
|
||||
"sort": 14
|
||||
},
|
||||
"1-5": {
|
||||
"type": "scene",
|
||||
"ele": "$..objects[?(@.name=='우리집')]",
|
||||
"point": 2,
|
||||
"desc": "문제 1/예쁜집/[개체] 이름 설정 3/이름을 '우리집'으로 변경하기",
|
||||
"sort": 15
|
||||
},
|
||||
"1-6": {
|
||||
"type": "scene",
|
||||
"ele": "$..objects[?(@.name=='어린이')]",
|
||||
"point": 2,
|
||||
"desc": "문제 1/어린이(2)/[개체] 이름 설정 4/이름을 '어린이'로 변경하기",
|
||||
"sort": 16
|
||||
},
|
||||
"2-0": {
|
||||
"type": "script",
|
||||
"ele": "$.objects[?(@.name=~'놀이동산')].script",
|
||||
"blocks": [
|
||||
{
|
||||
"ele": "$[0][0].type",
|
||||
"answer": "when_run_button_click",
|
||||
"point": 2.36,
|
||||
"desc": "문제 2/놀이동산/시작/시작하기 버튼을 클릭했을 때"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][1].type",
|
||||
"$[0][1].params[0].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"set_scale_size",
|
||||
"90"
|
||||
],
|
||||
"point": 2.36,
|
||||
"desc": "문제 2/놀이동산/[시작]의 세부 동작 1/크기를 '90' 으로 정하기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][2].type",
|
||||
"$[0][2].params[0].params[0]",
|
||||
"$[0][2].params[1].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"locate_xy",
|
||||
"-25",
|
||||
"60"
|
||||
],
|
||||
"point": 2.36,
|
||||
"desc": "문제 2/놀이동산/[시작]의 세부 동작 2/x: '-25' y: '60' 위치로 이동하기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[1][0].type",
|
||||
"$[1][0].params[1]"
|
||||
],
|
||||
"answer": [
|
||||
"when_some_key_pressed",
|
||||
"49"
|
||||
],
|
||||
"point": 2.36,
|
||||
"desc": "문제 2/놀이동산/'1' 키/1' 키를 눌렀을 때",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[1][1].type",
|
||||
"$[1][1].params[0]",
|
||||
"$[1][1].params[1].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"add_effect_amount",
|
||||
"color",
|
||||
"30"
|
||||
],
|
||||
"point": 2.36,
|
||||
"desc": "문제 2/놀이동산/['1' 키]의 세부 동작 1/'색깔' 효과를 '30' 만큼 주기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": "$[1][2].params[*].params",
|
||||
"answer": [
|
||||
"여기는 놀이동산!",
|
||||
"1"
|
||||
],
|
||||
"point": 2.36,
|
||||
"desc": "문제 2/놀이동산/['1' 키]의 세부 동작 2/'여기는 놀이동산!' 을 '1' 초 동안 '말하기'"
|
||||
},
|
||||
{
|
||||
"ele": "$[1][3].type",
|
||||
"answer": "erase_all_effects",
|
||||
"point": 2.36,
|
||||
"desc": "문제 2/놀이동산/['1' 키]의 세부 동작 3/효과 모두 지우기"
|
||||
}
|
||||
],
|
||||
"sortBlock": [
|
||||
"when_run_button_click",
|
||||
"when_some_key_pressed"
|
||||
],
|
||||
"sort": 102
|
||||
},
|
||||
"3-0": {
|
||||
"type": "script",
|
||||
"ele": "$.objects[?(@.name=~'백화점|건물')].script",
|
||||
"blocks": [
|
||||
{
|
||||
"ele": "$[0][0].type",
|
||||
"answer": "when_run_button_click",
|
||||
"point": 2.36,
|
||||
"desc": "문제 2/백화점/시작/시작하기 버튼을 클릭했을 때"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][1].type",
|
||||
"$[0][1].params[0].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"set_scale_size",
|
||||
"50"
|
||||
],
|
||||
"point": 2.36,
|
||||
"desc": "문제 2/백화점/[시작]의 세부 동작 1/크기를 '50' 으로 정하기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][2].type",
|
||||
"$[0][2].params[0].params[0]",
|
||||
"$[0][2].params[1].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"locate_xy",
|
||||
"180",
|
||||
"50"
|
||||
],
|
||||
"point": 2.36,
|
||||
"desc": "문제 2/백화점/[시작]의 세부 동작 2/x: '180' y: '50' 위치로 이동하기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[1][0].type",
|
||||
"$[1][0].params[1]"
|
||||
],
|
||||
"answer": [
|
||||
"when_some_key_pressed",
|
||||
"50"
|
||||
],
|
||||
"point": 2.36,
|
||||
"desc": "문제 2/백화점/'2' 키/'2' 키를 눌렀을 때",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[1][1].type",
|
||||
"$[1][1].params[0]",
|
||||
"$[1][1].params[1].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"add_effect_amount",
|
||||
"color",
|
||||
"40"
|
||||
],
|
||||
"point": 2.36,
|
||||
"desc": "문제 2/백화점/['2' 키]의 세부 동작 1/'색깔' 효과를 '40' 만큼 주기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": "$[1][2].params[*].params",
|
||||
"answer": [
|
||||
"여기는 백화점!",
|
||||
"1"
|
||||
],
|
||||
"point": 2.36,
|
||||
"desc": "문제 2/백화점/['2' 키]의 세부 동작 2/'여기는 백화점!' 을 '1' 초 동안 '말하기'"
|
||||
},
|
||||
{
|
||||
"ele": "$[1][3].type",
|
||||
"answer": "erase_all_effects",
|
||||
"point": 2.36,
|
||||
"desc": "문제 2/백화점/['2' 키]의 세부 동작 3/효과 모두 지우기"
|
||||
}
|
||||
],
|
||||
"sortBlock": [
|
||||
"when_run_button_click",
|
||||
"when_some_key_pressed"
|
||||
],
|
||||
"sort": 109
|
||||
},
|
||||
"4-0": {
|
||||
"type": "script",
|
||||
"ele": "$.objects[?(@.name=~'우리집|예쁜')].script",
|
||||
"blocks": [
|
||||
{
|
||||
"ele": "$[0][0].type",
|
||||
"answer": "when_run_button_click",
|
||||
"point": 2.36,
|
||||
"desc": "문제 2/우리집/시작/시작하기 버튼을 클릭했을 때"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][1].type",
|
||||
"$[0][1].params[0].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"set_scale_size",
|
||||
"60"
|
||||
],
|
||||
"point": 2.36,
|
||||
"desc": "문제 2/우리집/[시작]의 세부 동작 1/크기를 '60' 으로 정하기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][2].type",
|
||||
"$[0][2].params[0].params[0]",
|
||||
"$[0][2].params[1].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"locate_xy",
|
||||
"-190",
|
||||
"-90"
|
||||
],
|
||||
"point": 2.36,
|
||||
"desc": "문제 2/우리집/[시작]의 세부 동작 2/x: '-190' y: '-90' 위치로 이동하기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[1][0].type",
|
||||
"$[1][0].params[1]"
|
||||
],
|
||||
"answer": [
|
||||
"when_some_key_pressed",
|
||||
"51"
|
||||
],
|
||||
"point": 2.36,
|
||||
"desc": "문제 2/우리집/'3' 키/'3' 키를 눌렀을 때",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[1][1].type",
|
||||
"$[1][1].params[0]",
|
||||
"$[1][1].params[1].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"add_effect_amount",
|
||||
"color",
|
||||
"35"
|
||||
],
|
||||
"point": 2.36,
|
||||
"desc": "문제 2/우리집/['3' 키]의 세부 동작 1/'색깔' 효과를 '35' 만큼 주기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[1][2].type",
|
||||
"$[1][2].params[0].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"wait_second",
|
||||
"1"
|
||||
],
|
||||
"point": 2.36,
|
||||
"desc": "문제 2/우리집/['3' 키]의 세부 동작 2/'1' 초 기다리기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": "$[1][3].type",
|
||||
"answer": "erase_all_effects",
|
||||
"point": 2.36,
|
||||
"desc": "문제 2/우리집/['3' 키]의 세부 동작 3/효과 모두 지우기"
|
||||
}
|
||||
],
|
||||
"sortBlock": [
|
||||
"when_run_button_click",
|
||||
"when_some_key_pressed"
|
||||
],
|
||||
"sort": 116
|
||||
},
|
||||
"5-0": {
|
||||
"type": "script",
|
||||
"ele": "$.objects[?(@.name=~'어린이')].script",
|
||||
"blocks": [
|
||||
{
|
||||
"ele": "$[0][0].type",
|
||||
"answer": "when_run_button_click",
|
||||
"point": 2.36,
|
||||
"desc": "문제 2/어린이/시작/시작하기 버튼을 클릭했을 때"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][1].type",
|
||||
"$[0][1].params[0].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"set_scale_size",
|
||||
"30"
|
||||
],
|
||||
"point": 2.36,
|
||||
"desc": "문제 2/어린이/[시작]의 세부 동작 1/크기를 '30' 으로 정하기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][2].type",
|
||||
"$[0][2].params[0].params[0]",
|
||||
"$[0][2].params[1].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"locate_xy",
|
||||
"-100",
|
||||
"-100"
|
||||
],
|
||||
"point": 2.36,
|
||||
"desc": "문제 2/어린이/[시작]의 세부 동작 2/x: '-100' y: '-100' 위치로 이동하기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][3].params[*].params",
|
||||
"answer": [
|
||||
"야호! 출발!",
|
||||
"1"
|
||||
],
|
||||
"point": 2.36,
|
||||
"desc": "문제 2/어린이/[시작]의 세부 동작 3/'야호! 출발!' 을 '1' 초 동안 '말하기'"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[1][0].type",
|
||||
"$[1][0].params[1]"
|
||||
],
|
||||
"answer": [
|
||||
"when_some_key_pressed",
|
||||
"49"
|
||||
],
|
||||
"point": 2.36,
|
||||
"type": "list",
|
||||
"desc": "문제 2/어린이/'1' 키/1' 키를 눌렀을 때"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[1][1].type",
|
||||
"$[1][1].params[0].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"locate_object_time",
|
||||
"2"
|
||||
],
|
||||
"point": 2.36,
|
||||
"desc": "문제 2/어린이/['1' 키]의 세부 동작 1/'2' 초 동안 '놀이동산' 위치로 이동하기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": "$[1][2].type",
|
||||
"answer": "hide",
|
||||
"point": 2.36,
|
||||
"desc": "문제 2/어린이/['1' 키]의 세부 동작 2/모양 숨기기"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[1][3].type",
|
||||
"$[1][3].params[0].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"wait_second",
|
||||
"1"
|
||||
],
|
||||
"point": 2.36,
|
||||
"desc": "문제 2/어린이/['1' 키]의 세부 동작 3/'1' 초 기다리기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": "$[1][4].type",
|
||||
"answer": "show",
|
||||
"point": 2.36,
|
||||
"desc": "문제 2/어린이/['1' 키]의 세부 동작 4/모양 보이기"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[2][0].type",
|
||||
"$[2][0].params[1]"
|
||||
],
|
||||
"answer": [
|
||||
"when_some_key_pressed",
|
||||
"50"
|
||||
],
|
||||
"point": 2.36,
|
||||
"type": "list",
|
||||
"desc": "문제 2/어린이/'2' 키/'2' 키를 눌렀을 때"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[2][1].type",
|
||||
"$[2][1].params[0].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"locate_object_time",
|
||||
"2"
|
||||
],
|
||||
"point": 2.36,
|
||||
"desc": "문제 2/어린이/['2' 키]의 세부 동작 1/'2' 초 동안 '백화점' 위치로 이동하기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": "$[2][2].type",
|
||||
"answer": "hide",
|
||||
"point": 2.36,
|
||||
"desc": "문제 2/어린이/['2' 키]의 세부 동작 2/모양 숨기기"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[2][3].type",
|
||||
"$[2][3].params[0].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"wait_second",
|
||||
"1"
|
||||
],
|
||||
"point": 2.36,
|
||||
"desc": "문제 2/어린이/['2' 키]의 세부 동작 3/'1' 초 기다리기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": "$[2][4].type",
|
||||
"answer": "show",
|
||||
"point": 2.36,
|
||||
"desc": "문제 2/어린이/['2' 키]의 세부 동작 4/모양 보이기"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[3][0].type",
|
||||
"$[3][0].params[1]"
|
||||
],
|
||||
"answer": [
|
||||
"when_some_key_pressed",
|
||||
"51"
|
||||
],
|
||||
"point": 2.36,
|
||||
"type": "list",
|
||||
"desc": "문제 2/어린이/'3' 키/'3' 키를 눌렀을 때"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[3][1].type",
|
||||
"$[3][1].params[0].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"locate_object_time",
|
||||
"2"
|
||||
],
|
||||
"point": 2.36,
|
||||
"desc": "문제 2/어린이/['3' 키]의 세부 동작 1/'2' 초 동안 '우리집' 위치로 이동하기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": "$[3][2].params[*].params",
|
||||
"answer": [
|
||||
"다녀왔습니다!",
|
||||
"1"
|
||||
],
|
||||
"point": 2.36,
|
||||
"desc": "문제 2/어린이/['3' 키]의 세부 동작 2/'다녀왔습니다!' 를 '1' 초 동안 '말하기'"
|
||||
}
|
||||
],
|
||||
"sortBlock": [
|
||||
"when_run_button_click",
|
||||
"when_some_key_pressed",
|
||||
"when_some_key_pressed",
|
||||
"when_some_key_pressed"
|
||||
],
|
||||
"sort": 123
|
||||
}
|
||||
}
|
||||
306
logs/cat.log
306
logs/cat.log
@@ -3105,3 +3105,309 @@ Traceback (most recent call last):
|
||||
File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\jsonpath_ng\parser.py", line 78, in p_error
|
||||
raise JsonPathParserError('Parse error at %s:%s near token %s (%s)'
|
||||
jsonpath_ng.exceptions.JsonPathParserError: Parse error at 1:4 near token ? (?)
|
||||
[2026-01-29 15:57:35] [ERROR] [main:408] 🚫Error processing ./output/00_test/2601_CAT_3_A_정답\project.json: Expected a string
|
||||
Traceback (most recent call last):
|
||||
File "D:\project\Entry\Entry-Scoring\main.py", line 403, in main
|
||||
points = process_project(project_data, scoring_data)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "D:\project\Entry\Entry-Scoring\main.py", line 281, in process_project
|
||||
block_elements = find_element(single_script, block_path)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "D:\project\Entry\Entry-Scoring\main.py", line 29, in find_element
|
||||
parsed_expr = parse(jsonpath_expr)
|
||||
^^^^^^^^^^^^^^^^^^^^
|
||||
File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\jsonpath_ng\ext\parser.py", line 176, in parse
|
||||
return ExtentedJsonPathParser(debug=debug).parse(path)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\jsonpath_ng\parser.py", line 58, in parse
|
||||
return self.parse_token_stream(lexer.tokenize(string))
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\jsonpath_ng\parser.py", line 61, in parse_token_stream
|
||||
return self.parser.parse(lexer = IteratorToTokenStream(token_iterator))
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\ply\yacc.py", line 333, in parse
|
||||
return self.parseopt_notrack(input, lexer, debug, tracking, tokenfunc)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\ply\yacc.py", line 1063, in parseopt_notrack
|
||||
lookahead = get_token() # Get the next token
|
||||
^^^^^^^^^^^
|
||||
File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\jsonpath_ng\parser.py", line 197, in token
|
||||
return next(self.iterator)
|
||||
^^^^^^^^^^^^^^^^^^^
|
||||
File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\jsonpath_ng\lexer.py", line 29, in tokenize
|
||||
new_lexer.input(string)
|
||||
File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\ply\lex.py", line 255, in input
|
||||
raise ValueError('Expected a string')
|
||||
ValueError: Expected a string
|
||||
[2026-01-29 15:59:56] [ERROR] [main:408] 🚫Error processing ./output/00_test/2601_CAT_3_A_정답\project.json: Expected a string
|
||||
Traceback (most recent call last):
|
||||
File "D:\project\Entry\Entry-Scoring\main.py", line 403, in main
|
||||
points = process_project(project_data, scoring_data)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "D:\project\Entry\Entry-Scoring\main.py", line 281, in process_project
|
||||
block_elements = find_element(single_script, block_path)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "D:\project\Entry\Entry-Scoring\main.py", line 29, in find_element
|
||||
parsed_expr = parse(jsonpath_expr)
|
||||
^^^^^^^^^^^^^^^^^^^^
|
||||
File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\jsonpath_ng\ext\parser.py", line 176, in parse
|
||||
return ExtentedJsonPathParser(debug=debug).parse(path)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\jsonpath_ng\parser.py", line 58, in parse
|
||||
return self.parse_token_stream(lexer.tokenize(string))
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\jsonpath_ng\parser.py", line 61, in parse_token_stream
|
||||
return self.parser.parse(lexer = IteratorToTokenStream(token_iterator))
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\ply\yacc.py", line 333, in parse
|
||||
return self.parseopt_notrack(input, lexer, debug, tracking, tokenfunc)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\ply\yacc.py", line 1063, in parseopt_notrack
|
||||
lookahead = get_token() # Get the next token
|
||||
^^^^^^^^^^^
|
||||
File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\jsonpath_ng\parser.py", line 197, in token
|
||||
return next(self.iterator)
|
||||
^^^^^^^^^^^^^^^^^^^
|
||||
File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\jsonpath_ng\lexer.py", line 29, in tokenize
|
||||
new_lexer.input(string)
|
||||
File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\ply\lex.py", line 255, in input
|
||||
raise ValueError('Expected a string')
|
||||
ValueError: Expected a string
|
||||
[2026-01-29 16:00:40] [ERROR] [main:408] 🚫Error processing ./output/00_test/2601_CAT_3_A_정답\project.json: Expected a string
|
||||
Traceback (most recent call last):
|
||||
File "D:\project\Entry\Entry-Scoring\main.py", line 403, in main
|
||||
points = process_project(project_data, scoring_data)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "D:\project\Entry\Entry-Scoring\main.py", line 281, in process_project
|
||||
block_elements = find_element(single_script, block_path)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "D:\project\Entry\Entry-Scoring\main.py", line 29, in find_element
|
||||
parsed_expr = parse(jsonpath_expr)
|
||||
^^^^^^^^^^^^^^^^^^^^
|
||||
File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\jsonpath_ng\ext\parser.py", line 176, in parse
|
||||
return ExtentedJsonPathParser(debug=debug).parse(path)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\jsonpath_ng\parser.py", line 58, in parse
|
||||
return self.parse_token_stream(lexer.tokenize(string))
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\jsonpath_ng\parser.py", line 61, in parse_token_stream
|
||||
return self.parser.parse(lexer = IteratorToTokenStream(token_iterator))
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\ply\yacc.py", line 333, in parse
|
||||
return self.parseopt_notrack(input, lexer, debug, tracking, tokenfunc)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\ply\yacc.py", line 1063, in parseopt_notrack
|
||||
lookahead = get_token() # Get the next token
|
||||
^^^^^^^^^^^
|
||||
File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\jsonpath_ng\parser.py", line 197, in token
|
||||
return next(self.iterator)
|
||||
^^^^^^^^^^^^^^^^^^^
|
||||
File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\jsonpath_ng\lexer.py", line 29, in tokenize
|
||||
new_lexer.input(string)
|
||||
File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\ply\lex.py", line 255, in input
|
||||
raise ValueError('Expected a string')
|
||||
ValueError: Expected a string
|
||||
[2026-01-29 16:05:50] [ERROR] [main:408] 🚫Error processing ./output/00_test/2601_CAT_3_A_정답\project.json: Expected a string
|
||||
Traceback (most recent call last):
|
||||
File "D:\project\Entry\Entry-Scoring\main.py", line 403, in main
|
||||
points = process_project(project_data, scoring_data)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "D:\project\Entry\Entry-Scoring\main.py", line 281, in process_project
|
||||
block_elements = find_element(single_script, block_path)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "D:\project\Entry\Entry-Scoring\main.py", line 29, in find_element
|
||||
parsed_expr = parse(jsonpath_expr)
|
||||
^^^^^^^^^^^^^^^^^^^^
|
||||
File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\jsonpath_ng\ext\parser.py", line 176, in parse
|
||||
return ExtentedJsonPathParser(debug=debug).parse(path)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\jsonpath_ng\parser.py", line 58, in parse
|
||||
return self.parse_token_stream(lexer.tokenize(string))
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\jsonpath_ng\parser.py", line 61, in parse_token_stream
|
||||
return self.parser.parse(lexer = IteratorToTokenStream(token_iterator))
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\ply\yacc.py", line 333, in parse
|
||||
return self.parseopt_notrack(input, lexer, debug, tracking, tokenfunc)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\ply\yacc.py", line 1063, in parseopt_notrack
|
||||
lookahead = get_token() # Get the next token
|
||||
^^^^^^^^^^^
|
||||
File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\jsonpath_ng\parser.py", line 197, in token
|
||||
return next(self.iterator)
|
||||
^^^^^^^^^^^^^^^^^^^
|
||||
File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\jsonpath_ng\lexer.py", line 29, in tokenize
|
||||
new_lexer.input(string)
|
||||
File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\ply\lex.py", line 255, in input
|
||||
raise ValueError('Expected a string')
|
||||
ValueError: Expected a string
|
||||
[2026-01-29 16:08:11] [ERROR] [main:408] 🚫Error processing ./output/00_test/2601_CAT_3_A_정답\project.json: Expected a string
|
||||
Traceback (most recent call last):
|
||||
File "D:\project\Entry\Entry-Scoring\main.py", line 403, in main
|
||||
points = process_project(project_data, scoring_data)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "D:\project\Entry\Entry-Scoring\main.py", line 281, in process_project
|
||||
block_elements = find_element(single_script, block_path)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "D:\project\Entry\Entry-Scoring\main.py", line 29, in find_element
|
||||
parsed_expr = parse(jsonpath_expr)
|
||||
^^^^^^^^^^^^^^^^^^^^
|
||||
File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\jsonpath_ng\ext\parser.py", line 176, in parse
|
||||
return ExtentedJsonPathParser(debug=debug).parse(path)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\jsonpath_ng\parser.py", line 58, in parse
|
||||
return self.parse_token_stream(lexer.tokenize(string))
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\jsonpath_ng\parser.py", line 61, in parse_token_stream
|
||||
return self.parser.parse(lexer = IteratorToTokenStream(token_iterator))
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\ply\yacc.py", line 333, in parse
|
||||
return self.parseopt_notrack(input, lexer, debug, tracking, tokenfunc)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\ply\yacc.py", line 1063, in parseopt_notrack
|
||||
lookahead = get_token() # Get the next token
|
||||
^^^^^^^^^^^
|
||||
File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\jsonpath_ng\parser.py", line 197, in token
|
||||
return next(self.iterator)
|
||||
^^^^^^^^^^^^^^^^^^^
|
||||
File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\jsonpath_ng\lexer.py", line 29, in tokenize
|
||||
new_lexer.input(string)
|
||||
File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\ply\lex.py", line 255, in input
|
||||
raise ValueError('Expected a string')
|
||||
ValueError: Expected a string
|
||||
[2026-01-29 16:08:51] [ERROR] [main:408] 🚫Error processing ./output/00_test/2601_CAT_3_A_정답\project.json: Expected a string
|
||||
Traceback (most recent call last):
|
||||
File "D:\project\Entry\Entry-Scoring\main.py", line 403, in main
|
||||
points = process_project(project_data, scoring_data)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "D:\project\Entry\Entry-Scoring\main.py", line 281, in process_project
|
||||
block_elements = find_element(single_script, block_path)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "D:\project\Entry\Entry-Scoring\main.py", line 29, in find_element
|
||||
parsed_expr = parse(jsonpath_expr)
|
||||
^^^^^^^^^^^^^^^^^^^^
|
||||
File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\jsonpath_ng\ext\parser.py", line 176, in parse
|
||||
return ExtentedJsonPathParser(debug=debug).parse(path)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\jsonpath_ng\parser.py", line 58, in parse
|
||||
return self.parse_token_stream(lexer.tokenize(string))
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\jsonpath_ng\parser.py", line 61, in parse_token_stream
|
||||
return self.parser.parse(lexer = IteratorToTokenStream(token_iterator))
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\ply\yacc.py", line 333, in parse
|
||||
return self.parseopt_notrack(input, lexer, debug, tracking, tokenfunc)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\ply\yacc.py", line 1063, in parseopt_notrack
|
||||
lookahead = get_token() # Get the next token
|
||||
^^^^^^^^^^^
|
||||
File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\jsonpath_ng\parser.py", line 197, in token
|
||||
return next(self.iterator)
|
||||
^^^^^^^^^^^^^^^^^^^
|
||||
File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\jsonpath_ng\lexer.py", line 29, in tokenize
|
||||
new_lexer.input(string)
|
||||
File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\ply\lex.py", line 255, in input
|
||||
raise ValueError('Expected a string')
|
||||
ValueError: Expected a string
|
||||
[2026-01-29 16:10:18] [ERROR] [main:408] 🚫Error processing ./output/00_test/2601_CAT_3_A_정답\project.json: Expected a string
|
||||
Traceback (most recent call last):
|
||||
File "D:\project\Entry\Entry-Scoring\main.py", line 403, in main
|
||||
points = process_project(project_data, scoring_data)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "D:\project\Entry\Entry-Scoring\main.py", line 281, in process_project
|
||||
block_elements = find_element(single_script, block_path)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "D:\project\Entry\Entry-Scoring\main.py", line 29, in find_element
|
||||
parsed_expr = parse(jsonpath_expr)
|
||||
^^^^^^^^^^^^^^^^^^^^
|
||||
File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\jsonpath_ng\ext\parser.py", line 176, in parse
|
||||
return ExtentedJsonPathParser(debug=debug).parse(path)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\jsonpath_ng\parser.py", line 58, in parse
|
||||
return self.parse_token_stream(lexer.tokenize(string))
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\jsonpath_ng\parser.py", line 61, in parse_token_stream
|
||||
return self.parser.parse(lexer = IteratorToTokenStream(token_iterator))
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\ply\yacc.py", line 333, in parse
|
||||
return self.parseopt_notrack(input, lexer, debug, tracking, tokenfunc)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\ply\yacc.py", line 1063, in parseopt_notrack
|
||||
lookahead = get_token() # Get the next token
|
||||
^^^^^^^^^^^
|
||||
File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\jsonpath_ng\parser.py", line 197, in token
|
||||
return next(self.iterator)
|
||||
^^^^^^^^^^^^^^^^^^^
|
||||
File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\jsonpath_ng\lexer.py", line 29, in tokenize
|
||||
new_lexer.input(string)
|
||||
File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\ply\lex.py", line 255, in input
|
||||
raise ValueError('Expected a string')
|
||||
ValueError: Expected a string
|
||||
[2026-01-29 16:14:04] [ERROR] [main:408] 🚫Error processing ./output/00_test/2601_CAT_3_A_정답\project.json: Expected a string
|
||||
Traceback (most recent call last):
|
||||
File "D:\project\Entry\Entry-Scoring\main.py", line 403, in main
|
||||
points = process_project(project_data, scoring_data)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "D:\project\Entry\Entry-Scoring\main.py", line 281, in process_project
|
||||
block_elements = find_element(single_script, block_path)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "D:\project\Entry\Entry-Scoring\main.py", line 29, in find_element
|
||||
parsed_expr = parse(jsonpath_expr)
|
||||
^^^^^^^^^^^^^^^^^^^^
|
||||
File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\jsonpath_ng\ext\parser.py", line 176, in parse
|
||||
return ExtentedJsonPathParser(debug=debug).parse(path)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\jsonpath_ng\parser.py", line 58, in parse
|
||||
return self.parse_token_stream(lexer.tokenize(string))
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\jsonpath_ng\parser.py", line 61, in parse_token_stream
|
||||
return self.parser.parse(lexer = IteratorToTokenStream(token_iterator))
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\ply\yacc.py", line 333, in parse
|
||||
return self.parseopt_notrack(input, lexer, debug, tracking, tokenfunc)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\ply\yacc.py", line 1063, in parseopt_notrack
|
||||
lookahead = get_token() # Get the next token
|
||||
^^^^^^^^^^^
|
||||
File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\jsonpath_ng\parser.py", line 197, in token
|
||||
return next(self.iterator)
|
||||
^^^^^^^^^^^^^^^^^^^
|
||||
File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\jsonpath_ng\lexer.py", line 29, in tokenize
|
||||
new_lexer.input(string)
|
||||
File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\ply\lex.py", line 255, in input
|
||||
raise ValueError('Expected a string')
|
||||
ValueError: Expected a string
|
||||
[2026-01-29 16:31:54] [ERROR] [main:414] 🚫Error processing ./output/00_test/2601_CAT_3_A_정답\project.json: Expected a string
|
||||
Traceback (most recent call last):
|
||||
File "D:\project\Entry\Entry-Scoring\main.py", line 409, in main
|
||||
points = process_project(project_data, scoring_data)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "D:\project\Entry\Entry-Scoring\main.py", line 287, in process_project
|
||||
block_elements = find_element(single_script, block_path)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "D:\project\Entry\Entry-Scoring\main.py", line 29, in find_element
|
||||
parsed_expr = parse(jsonpath_expr)
|
||||
^^^^^^^^^^^^^^^^^^^^
|
||||
File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\jsonpath_ng\ext\parser.py", line 176, in parse
|
||||
return ExtentedJsonPathParser(debug=debug).parse(path)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\jsonpath_ng\parser.py", line 58, in parse
|
||||
return self.parse_token_stream(lexer.tokenize(string))
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\jsonpath_ng\parser.py", line 61, in parse_token_stream
|
||||
return self.parser.parse(lexer = IteratorToTokenStream(token_iterator))
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\ply\yacc.py", line 333, in parse
|
||||
return self.parseopt_notrack(input, lexer, debug, tracking, tokenfunc)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\ply\yacc.py", line 1063, in parseopt_notrack
|
||||
lookahead = get_token() # Get the next token
|
||||
^^^^^^^^^^^
|
||||
File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\jsonpath_ng\parser.py", line 197, in token
|
||||
return next(self.iterator)
|
||||
^^^^^^^^^^^^^^^^^^^
|
||||
File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\jsonpath_ng\lexer.py", line 29, in tokenize
|
||||
new_lexer.input(string)
|
||||
File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\ply\lex.py", line 255, in input
|
||||
raise ValueError('Expected a string')
|
||||
ValueError: Expected a string
|
||||
|
||||
33
main.py
33
main.py
@@ -192,13 +192,20 @@ def process_project(project_data, scoring_data):
|
||||
# - 복제본이 생성 되었을 때 : when_clone_start
|
||||
# - 장면이 시작 되었을 때 : when_scene_start
|
||||
# - 오브젝트를 클릭 했을 때 : when_object_click
|
||||
# - 특정 키가 눌렸을 때 : when_some_key_pressed
|
||||
# 이벤트 블록이 존재하는지 여부 확인용 변수
|
||||
|
||||
# 2026-01-29 16:40:29
|
||||
# target_event_type 회차마다 추가 될 수 있으므로
|
||||
# 채점 기준표의 answer 키값과 비교하여 동적으로 처리하도록 수정
|
||||
# 2601회는 "when_some_key_pressed"가 필요해서 추가함
|
||||
target_event_type = {
|
||||
"when_run_button_click",
|
||||
"when_message_cast",
|
||||
"when_clone_start",
|
||||
"when_scene_start",
|
||||
"when_object_click"
|
||||
"when_object_click",
|
||||
"when_some_key_pressed"
|
||||
}
|
||||
|
||||
for question_key, question_info in scoring_data.items():
|
||||
@@ -215,9 +222,19 @@ def process_project(project_data, scoring_data):
|
||||
# block_event_order 리스트에 추가
|
||||
if isinstance(block_list, list) and block_list:
|
||||
for block in block_list:
|
||||
answer = block.get("answer") # answer 키값을 안전하게 가져오기
|
||||
if isinstance(answer, str) and answer in target_event_type:
|
||||
block_event_order.append(answer) # 리스트에 추가
|
||||
answer = block.get("answer")
|
||||
if isinstance(answer, str):
|
||||
if answer in target_event_type:
|
||||
block_event_order.append(answer)
|
||||
|
||||
# 2026-01-29 16:39:48
|
||||
# answer가 리스트인 경우 리스트 요소들 모두를 확인
|
||||
# JSON채점 기준표에서 answer가 리스트인 경우가 생겨서 추가함
|
||||
elif isinstance(answer, list):
|
||||
# answer 리스트 내에 target_event_type에 포함된 요소가 있으면 추가
|
||||
for ans_item in answer:
|
||||
if ans_item in target_event_type:
|
||||
block_event_order.append(ans_item)
|
||||
|
||||
print(f"▶ Processing question: {question_key}")
|
||||
|
||||
@@ -336,11 +353,11 @@ def normalize_path(path):
|
||||
def main():
|
||||
timestamp = datetime.now().strftime("%y%m%d")
|
||||
|
||||
test_mode = False # 일반 채점 모드
|
||||
# test_mode = True # 테스트 모드
|
||||
# test_mode = False # 일반 채점 모드
|
||||
test_mode = True # 테스트 모드
|
||||
|
||||
exam_round = "2512"
|
||||
exam_names = ["CAS_2_A"] # 여러 시험명을 리스트로 설정
|
||||
exam_round = "2601"
|
||||
exam_names = ["CAT_3_A"] # 여러 시험명을 리스트로 설정
|
||||
# exam_names = ["CAS_2_A", "CAS_2_B"] # 여러 시험명을 리스트로 설정
|
||||
excel_list = []
|
||||
|
||||
|
||||
BIN
시험자료/2601/제2601회 코딩활용능력 3급 A형 문제.hwp
Normal file
BIN
시험자료/2601/제2601회 코딩활용능력 3급 A형 문제.hwp
Normal file
Binary file not shown.
BIN
시험자료/2601/제2601회 코딩활용능력 3급 A형 정답.ent
Normal file
BIN
시험자료/2601/제2601회 코딩활용능력 3급 A형 정답.ent
Normal file
Binary file not shown.
BIN
시험자료/2601/제2601회 코딩활용능력 3급 A형 채점기준표.xlsx
Normal file
BIN
시험자료/2601/제2601회 코딩활용능력 3급 A형 채점기준표.xlsx
Normal file
Binary file not shown.
Reference in New Issue
Block a user