AKShare is an elegant and simple financial data interface library for Python, built for human beings! 开源财经数据接口库
This report summarizes scanner evidence for akfamily/akshare, a Python project with 22,886 GitHub stars. SynthScan examined 189,296 lines of code across 485 source files, recording 1894 pattern matches distributed across 12 syntactic categories. The legacy adjusted pattern signal is 9.4 (Moderate pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Can maintainers explain intent, assumptions, and trade-offs? 615 finding(s).
Are imports declared and package/API names verified? 1173 finding(s).
Are wrappers, guards, and repeated structures necessary? 607 finding(s).
Which changes need focused human review? 1894 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 1894 distinct pattern matches across 12 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | akshare/__init__.py | 3311 | CODE | |
| LOW | akshare/__init__.py | 3317 | CODE | |
| LOW | akshare/__init__.py | 3317 | CODE | |
| LOW | akshare/__init__.py | 3317 | CODE | |
| LOW | akshare/__init__.py | 3326 | CODE | |
| LOW | akshare/__init__.py | 3331 | CODE | |
| LOW | akshare/__init__.py | 3336 | CODE | |
| LOW | akshare/__init__.py | 3336 | CODE | |
| LOW | akshare/__init__.py | 3336 | CODE | |
| LOW | akshare/__init__.py | 3336 | CODE | |
| LOW | akshare/__init__.py | 3336 | CODE | |
| LOW | akshare/__init__.py | 3336 | CODE | |
| LOW | akshare/__init__.py | 3348 | CODE | |
| LOW | akshare/__init__.py | 3348 | CODE | |
| LOW | akshare/__init__.py | 3353 | CODE | |
| LOW | akshare/__init__.py | 3358 | CODE | |
| LOW | akshare/__init__.py | 3363 | CODE | |
| LOW | akshare/__init__.py | 3368 | CODE | |
| LOW | akshare/__init__.py | 3373 | CODE | |
| LOW | akshare/__init__.py | 3378 | CODE | |
| LOW | akshare/__init__.py | 3378 | CODE | |
| LOW | akshare/__init__.py | 3383 | CODE | |
| LOW | akshare/__init__.py | 3383 | CODE | |
| LOW | akshare/__init__.py | 3388 | CODE | |
| LOW | akshare/__init__.py | 3388 | CODE | |
| LOW | akshare/__init__.py | 3393 | CODE | |
| LOW | akshare/__init__.py | 3393 | CODE | |
| LOW | akshare/__init__.py | 3393 | CODE | |
| LOW | akshare/__init__.py | 3402 | CODE | |
| LOW | akshare/__init__.py | 3402 | CODE | |
| LOW | akshare/__init__.py | 3402 | CODE | |
| LOW | akshare/__init__.py | 3402 | CODE | |
| LOW | akshare/__init__.py | 3411 | CODE | |
| LOW | akshare/__init__.py | 3411 | CODE | |
| LOW | akshare/__init__.py | 3411 | CODE | |
| LOW | akshare/__init__.py | 3416 | CODE | |
| LOW | akshare/__init__.py | 3421 | CODE | |
| LOW | akshare/__init__.py | 3421 | CODE | |
| LOW | akshare/__init__.py | 3421 | CODE | |
| LOW | akshare/__init__.py | 3430 | CODE | |
| LOW | akshare/__init__.py | 3430 | CODE | |
| LOW | akshare/__init__.py | 3435 | CODE | |
| LOW | akshare/__init__.py | 3435 | CODE | |
| LOW | akshare/__init__.py | 3440 | CODE | |
| LOW | akshare/__init__.py | 3440 | CODE | |
| LOW | akshare/__init__.py | 3445 | CODE | |
| LOW | akshare/__init__.py | 3445 | CODE | |
| LOW | akshare/__init__.py | 3450 | CODE | |
| LOW | akshare/__init__.py | 3450 | CODE | |
| LOW | akshare/__init__.py | 3458 | CODE | |
| LOW | akshare/__init__.py | 3458 | CODE | |
| LOW | akshare/__init__.py | 3463 | CODE | |
| LOW | akshare/__init__.py | 3468 | CODE | |
| LOW | akshare/__init__.py | 3473 | CODE | |
| LOW | akshare/__init__.py | 3478 | CODE | |
| LOW | akshare/__init__.py | 3483 | CODE | |
| LOW | akshare/__init__.py | 3483 | CODE | |
| LOW | akshare/__init__.py | 3483 | CODE | |
| LOW | akshare/__init__.py | 3488 | CODE | |
| LOW | akshare/__init__.py | 3488 | CODE | |
| 1048 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tests/test_registry.py | 18 | def test_tokenize_splits_on_whitespace_and_punctuation(): | CODE |
| LOW⚡ | tests/test_registry.py | 23 | def test_tokenize_drops_empty(): | CODE |
| LOW⚡ | tests/test_registry.py | 27 | def test_score_exact_name_match_dominates(): | CODE |
| LOW⚡ | tests/test_registry.py | 31 | def test_score_desc_hit_lower_than_name_hit(): | CODE |
| LOW⚡ | tests/test_registry.py | 37 | def test_score_matches_output_column(): | CODE |
| LOW⚡ | tests/test_registry.py | 41 | def test_score_all_tokens_hit_gets_bonus(): | CODE |
| LOW⚡ | tests/test_registry.py | 47 | def test_score_undocumented_is_downweighted(): | CODE |
| LOW⚡ | tests/test_registry.py | 51 | def test_score_no_hit_returns_zero(): | CODE |
| LOW⚡ | tests/test_registry.py | 187 | def test_search_returns_dataframe_with_expected_columns(): | CODE |
| LOW⚡ | tests/test_registry.py | 194 | def test_search_empty_result_keeps_columns(): | CODE |
| LOW⚡ | tests/test_registry.py | 200 | def test_search_respects_limit(): | CODE |
| LOW⚡ | tests/test_registry.py | 204 | def test_search_filters_by_category(): | CODE |
| LOW⚡ | tests/test_registry.py | 209 | def test_search_documented_only_excludes_undocumented(): | CODE |
| LOW⚡ | tests/test_registry.py | 215 | def test_interface_info_returns_full_record(): | CODE |
| LOW⚡ | tests/test_registry.py | 221 | def test_interface_info_unknown_name_suggests_candidates(): | CODE |
| LOW⚡ | tests/test_registry.py | 227 | def test_interface_info_deepcopy_isolates_nested_structures(monkeypatch): | CODE |
| LOW⚡ | tests/test_registry.py | 265 | def test_list_categories_counts(): | CODE |
| LOW⚡ | tests/test_registry.py | 271 | def test_bigrams_single_char_returns_empty(): | CODE |
| LOW⚡ | tests/test_registry.py | 275 | def test_bigrams_compresses_whitespace_before_splitting(): | CODE |
| LOW⚡ | tests/test_registry.py | 279 | def test_search_exact_name_is_ranked_first(): | CODE |
| LOW⚡ | tests/test_registry.py | 315 | def test_search_exact_name_survives_trailing_punctuation(suffix, monkeypatch): | CODE |
| LOW⚡ | tests/test_registry.py | 321 | def test_search_unspaced_query_recalls_via_bigram_fallback(): | CODE |
| LOW⚡ | tests/test_registry.py | 330 | def test_search_negative_limit_raises(): | CODE |
| LOW⚡ | tests/test_registry.py | 335 | def test_search_empty_query_returns_empty_with_columns(): | CODE |
| LOW | tests/test_registry.py | 67 | def test_score_normalizes_whitespace_between_latin_and_cjk(): | CODE |
| LOW | tests/test_registry.py | 87 | def test_score_does_not_match_across_adjacent_column_boundary(): | CODE |
| LOW | tests/test_registry.py | 102 | def test_score_category_only_hit_is_positive(): | CODE |
| LOW | tests/test_registry.py | 106 | def test_score_desc_gt_category_gt_output_when_each_hits_alone(): | CODE |
| LOW⚡ | tests/test_registry_integration.py | 12 | def test_public_api_is_exported(): | CODE |
| LOW⚡ | tests/test_registry_integration.py | 20 | def test_real_search_returns_callable_interfaces(): | CODE |
| LOW⚡ | tests/test_registry_integration.py | 30 | def test_every_registry_entry_is_reachable(): | CODE |
| LOW | tests/test_legu_csrf.py | 86 | def test_csrf_error_message_mentions_status_and_source(patch_get): | CODE |
| LOW | tests/test_legu_csrf.py | 100 | def test_csrf_wraps_connection_error_without_response(monkeypatch): | CODE |
| LOW | tests/test_legu_csrf.py | 114 | def test_csrf_raises_parsing_error_when_tag_missing(patch_get): | CODE |
| LOW | tests/test_legu_csrf.py | 125 | def test_csrf_returns_token_on_normal_page(patch_get): | CODE |
| LOW | tests/test_legu_csrf.py | 135 | def test_csrf_does_not_mutate_shared_headers(patch_get): | CODE |
| LOW | tests/test_check_release.py | 39 | def test_parse_tag_extracts_version(): | CODE |
| LOW | tests/test_check_release.py | 47 | def test_parse_tag_rejects_malformed(tag): | CODE |
| LOW⚡ | tests/test_check_release.py | 59 | def test_read_version_without_declaration_raises(tmp_path): | CODE |
| LOW⚡ | tests/test_check_release.py | 66 | def test_has_version_entry_requires_line_start(): | CODE |
| LOW⚡ | tests/test_check_release.py | 74 | def test_collect_problems_passes_when_all_aligned(tmp_path): | CODE |
| LOW⚡ | tests/test_check_release.py | 79 | def test_collect_problems_detects_tag_version_mismatch(tmp_path): | CODE |
| LOW⚡ | tests/test_check_release.py | 86 | def test_collect_problems_detects_missing_changelog_entry(tmp_path): | CODE |
| LOW⚡ | tests/test_check_release.py | 92 | def test_collect_problems_detects_missing_init_history(tmp_path): | CODE |
| LOW⚡ | tests/test_check_release.py | 98 | def test_collect_problems_reports_every_problem_at_once(tmp_path): | CODE |
| LOW⚡ | tests/test_build_registry.py | 85 | def test_parse_table_missing_header_returns_empty(): | CODE |
| LOW⚡ | tests/test_build_registry.py | 89 | def test_parse_table_pads_missing_desc_when_row_has_two_cells(): | CODE |
| LOW⚡ | tests/test_build_registry.py | 95 | def test_parse_table_truncates_extra_column_when_row_has_four_cells(): | CODE |
| LOW | tests/test_build_registry.py | 169 | def test_collect_doc_records_category_from_parent_dir_name(tmp_path): | CODE |
| LOW | tests/test_build_registry.py | 179 | def test_collect_doc_records_supports_fullwidth_colon(tmp_path): | CODE |
| LOW⚡ | tests/test_build_registry.py | 65 | def test_parse_table_reads_rows(): | STRING |
| LOW⚡ | tests/test_build_registry.py | 73 | def test_parse_table_picks_correct_header(): | STRING |
| LOW⚡ | tests/test_build_registry.py | 78 | def test_parse_table_stops_at_blank_line_not_next_table(): | STRING |
| LOW⚡ | tests/test_build_registry.py | 314 | def test_serialize_has_no_timestamp_or_version(): | STRING |
| LOW⚡ | tests/test_build_registry.py | 320 | def test_serialize_ends_with_single_newline(): | STRING |
| LOW⚡ | tests/test_build_registry.py | 329 | def test_baseline_allows_known_gaps(): | STRING |
| LOW⚡ | tests/test_build_registry.py | 335 | def test_baseline_rejects_new_undocumented(): | STRING |
| LOW⚡ | tests/test_build_registry.py | 343 | def test_baseline_rejects_new_orphan(): | STRING |
| LOW⚡ | tests/test_build_registry.py | 351 | def test_baseline_rejects_stale_entry(): | STRING |
| LOW⚡ | tests/test_build_registry.py | 360 | def test_baseline_rejects_fixed_orphan(): | STRING |
| 434 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH⚡ | akshare/utils/demjson.py | 239 | # ECMAScript has an undefined value (similar to yet distinct from null). | COMMENT |
| HIGH⚡ | akshare/utils/demjson.py | 240 | # Neither Python or strict JSON have support undefined, but to allow | COMMENT |
| HIGH | akshare/utils/demjson.py | 260 | syntax_error = _undefined_class() # same as undefined, but has separate identity | CODE |
| HIGH | akshare/utils/demjson.py | 3164 | "Arrays may have omitted/elided elements, e.g., [1,,3] == [1,undefined,3]", | CODE |
| HIGH | akshare/utils/demjson.py | 5201 | obj.append(undefined) | CODE |
| HIGH⚡ | akshare/stock/cons.py | 101 | c.push(c0); | CODE |
| HIGH⚡ | akshare/stock/cons.py | 102 | if (c.length == 3 || i == s.length - 1) | CODE |
| HIGH⚡ | akshare/stock/cons.py | 106 | c.push(0); | CODE |
| HIGH⚡ | akshare/stock/cons.py | 108 | a.push((c[0] >> 2) & 63); | CODE |
| HIGH⚡ | akshare/stock/cons.py | 109 | a.push(((c[1] >> 4) | (c[0] << 6)) & 63); | CODE |
| HIGH⚡ | akshare/stock/cons.py | 110 | a.push(((c[1] << 4) | (c[2] >> 2)) & 63); | CODE |
| HIGH⚡ | akshare/stock/cons.py | 111 | a.push(c[2] & 63); | CODE |
| HIGH⚡ | akshare/stock/cons.py | 117 | a.push(0); | CODE |
| HIGH⚡ | akshare/stock/cons.py | 437 | t = 0; !(e >= n) && (e != n - 1 || 7 & (r.c ^ t)); t++) { | CODE |
| HIGH⚡ | akshare/stock/cons.py | 445 | u = "v" == m && r.rv ? y() : 1, | CODE |
| HIGH⚡ | akshare/stock/cons.py | 449 | if (!(l[h[m]] = a) && (s > 1 || 241 > t) && (r.zv ? !y() : 1)) { | CODE |
| HIGH⚡ | akshare/stock/cons.py | 459 | c.push(l) | CODE |
| HIGH⚡ | akshare/stock/cons.py | 665 | t.push(i) | CODE |
| HIGH⚡ | akshare/stock/cons.py | 670 | if (t = (t || 0).toString(), | CODE |
| HIGH⚡ | akshare/stock/cons.py | 675 | n.push(Math.floor(e * Math.pow(10, -e) + .5) - 0); | CODE |
| HIGH⚡ | akshare/stock/cons.py | 883 | t = 0; !(e >= i) && (e != i - 1 || 7 & (o.c ^ t)); t++) { | CODE |
| HIGH⚡ | akshare/stock/cons.py | 891 | c = "v" == p && o.rv ? _() : 1, | CODE |
| HIGH⚡ | akshare/stock/cons.py | 895 | if (!(l[d[p]] = r) && (s > 1 || 241 > t) && (o.zv ? !_() : 1)) { | CODE |
| HIGH⚡ | akshare/stock/cons.py | 905 | u.push(l) | CODE |
| HIGH⚡ | akshare/stock/cons.py | 1114 | t.push(n) | CODE |
| HIGH⚡ | akshare/stock/cons.py | 1121 | if (t = (t || 0).toString(), | CODE |
| HIGH⚡ | akshare/stock/cons.py | 1126 | i.push(Math.floor(e * Math.pow(10, -e) + .5) - 0); | CODE |
| HIGH | akshare/stock/cons.py | 249 | for (c.push("+", "/"), | CODE |
| HIGH | akshare/stock/cons.py | 331 | (3 == n || 4 == n) && (r.d += 5 - n); | CODE |
| HIGH | akshare/stock/cons.py | 337 | for (n = r.wd || 62, | CODE |
| HIGH | akshare/stock/cons.py | 351 | e && n[e - 1]++, | CODE |
| HIGH | akshare/stock/cons.py | 405 | i.push(l), | CODE |
| HIGH | akshare/stock/cons.py | 406 | !(e >= n) && (e != n - 1 || 63 & (r.c ^ t + 1)); t++) | CODE |
| HIGH | akshare/stock/cons.py | 519 | l & 1 << 4 - e && i.l_l[e]++, | CODE |
| HIGH | akshare/stock/cons.py | 533 | t.push(n) | CODE |
| HIGH | akshare/stock/cons.py | 548 | n--)) : t.push(e), | CODE |
| HIGH | akshare/stock/cons.py | 563 | for (t = 0; !(e >= n) && (e != n - 1 || 7 & (r.c ^ t)); t++) { | CODE |
| HIGH | akshare/stock/cons.py | 569 | a.push(o) | CODE |
| HIGH | akshare/stock/cons.py | 628 | !r.b_avp && a.a && (r.u_a = P(i && i.amount || 0, 0, r.p_a)) | CODE |
| HIGH | akshare/stock/cons.py | 628 | !r.b_avp && a.a && (r.u_a = P(i && i.amount || 0, 0, r.p_a)) | CODE |
| HIGH | akshare/stock/cons.py | 641 | y() ? y() ? y() ? a.d = x() : r.l_v += N() : r.b_ph && y() ? r["l_" + "et".charAt(r.b_phx && | CODE |
| HIGH | akshare/stock/cons.py | 695 | for (u.push("+", "/"), | CODE |
| HIGH | akshare/stock/cons.py | 777 | (3 == i || 4 == i) && (o.d += 5 - i); | CODE |
| HIGH | akshare/stock/cons.py | 783 | for (i = o.wd || 62, | CODE |
| HIGH | akshare/stock/cons.py | 797 | e && i[e - 1]++, | CODE |
| HIGH | akshare/stock/cons.py | 851 | n.push(l), | CODE |
| HIGH | akshare/stock/cons.py | 852 | !(e >= i) && (e != i - 1 || 63 & (o.c ^ t + 1)); t++) | CODE |
| HIGH | akshare/stock/cons.py | 965 | l & 1 << 4 - e && n.l_l[e]++, | CODE |
| HIGH | akshare/stock/cons.py | 979 | t.push(i) | CODE |
| HIGH | akshare/stock/cons.py | 994 | i--)) : t.push(e), | CODE |
| HIGH | akshare/stock/cons.py | 1010 | for (t = 0; !(e >= i) && (e != i - 1 || 7 & (o.c ^ t)); t++) { | CODE |
| HIGH | akshare/stock/cons.py | 1016 | r.push(a) | CODE |
| HIGH | akshare/stock/cons.py | 1077 | !o.b_avp && r.a && (o.u_a = C(n && n.amount || 0, 0, o.p_a)) | CODE |
| HIGH | akshare/stock/cons.py | 1077 | !o.b_avp && r.a && (o.u_a = C(n && n.amount || 0, 0, o.p_a)) | CODE |
| HIGH | akshare/stock/cons.py | 1090 | _() ? _() ? _() ? r.d = x() : o.l_v += y() : o.b_ph && _() ? o["l_" + "et".charAt(o.b_phx && | CODE |
| HIGH | akshare/stock_feature/stock_cyq_em.py | 62 | yrange.push((minprice + accuracy * i).toFixed(2) / 1); | CODE |
| HIGH | akshare/stock_feature/stock_cyq_em.py | 77 | turnoverRate = Math.min(1, eles.hsl / 100 || 0); | CODE |
| HIGH | akshare/stock_feature/stock_cyq_em.py | 185 | if (percent > 1 || percent < 0) throw 'argument "percent" out of range'; | CODE |
| HIGH | akshare/stock_feature/stock_cyq_em.py | 214 | array.push(0); | CODE |
| HIGH | akshare/stock_feature/stock_a_pe_and_pb.py | 20 | if (n && n.length) { | CODE |
| 5 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | akshare/movie/movie_yien.py | 0 | get js file path :param name: file name :type name: str :param module_file: filename :type module_file: str :return: 路径 | STRING |
| HIGH | akshare/movie/video_yien.py | 0 | get js file path :param name: file name :type name: str :param module_file: filename :type module_file: str :return: 路径 | STRING |
| HIGH | akshare/movie/artist_yien.py | 0 | get js file path :param name: file name :type name: str :param module_file: filename :type module_file: str :return: 路径 | STRING |
| HIGH | akshare/movie/movie_yien.py | 0 | read the file content :param file_name: filename :type file_name: str :return: file content :rtype: str | STRING |
| HIGH | akshare/movie/video_yien.py | 0 | read the file content :param file_name: filename :type file_name: str :return: file content :rtype: str | STRING |
| HIGH | akshare/movie/artist_yien.py | 0 | read the file content :param file_name: filename :type file_name: str :return: file content :rtype: str | STRING |
| HIGH | akshare/bond/bond_issue_cninfo.py | 0 | 获取 js 文件的内容 :param file: js 文件名 :type file: str :return: 文件内容 :rtype: str | STRING |
| HIGH | akshare/stock/stock_industry_pe_cninfo.py | 0 | 获取 js 文件的内容 :param file: js 文件名 :type file: str :return: 文件内容 :rtype: str | STRING |
| HIGH | akshare/stock/stock_hold_num_cninfo.py | 0 | 获取 js 文件的内容 :param file: js 文件名 :type file: str :return: 文件内容 :rtype: str | STRING |
| HIGH | akshare/stock/stock_dividend_cninfo.py | 0 | 获取 js 文件的内容 :param file: js 文件名 :type file: str :return: 文件内容 :rtype: str | STRING |
| HIGH | akshare/stock/stock_rank_forecast.py | 0 | 获取 js 文件的内容 :param file: js 文件名 :type file: str :return: 文件内容 :rtype: str | STRING |
| HIGH | akshare/stock/stock_cg_guarantee.py | 0 | 获取 js 文件的内容 :param file: js 文件名 :type file: str :return: 文件内容 :rtype: str | STRING |
| HIGH | akshare/stock/stock_hold_control_cninfo.py | 0 | 获取 js 文件的内容 :param file: js 文件名 :type file: str :return: 文件内容 :rtype: str | STRING |
| HIGH | akshare/stock/stock_ipo_summary_cninfo.py | 0 | 获取 js 文件的内容 :param file: js 文件名 :type file: str :return: 文件内容 :rtype: str | STRING |
| HIGH | akshare/stock/stock_allotment_cninfo.py | 0 | 获取 js 文件的内容 :param file: js 文件名 :type file: str :return: 文件内容 :rtype: str | STRING |
| HIGH | akshare/stock/stock_profile_cninfo.py | 0 | 获取 js 文件的内容 :param file: js 文件名 :type file: str :return: 文件内容 :rtype: str | STRING |
| HIGH | akshare/stock/stock_industry_cninfo.py | 0 | 获取 js 文件的内容 :param file: js 文件名 :type file: str :return: 文件内容 :rtype: str | STRING |
| HIGH | akshare/stock/stock_cg_equity_mortgage.py | 0 | 获取 js 文件的内容 :param file: js 文件名 :type file: str :return: 文件内容 :rtype: str | STRING |
| HIGH | akshare/stock/stock_share_changes_cninfo.py | 0 | 获取 js 文件的内容 :param file: js 文件名 :type file: str :return: 文件内容 :rtype: str | STRING |
| HIGH | akshare/stock/stock_new_cninfo.py | 0 | 获取 js 文件的内容 :param file: js 文件名 :type file: str :return: 文件内容 :rtype: str | STRING |
| HIGH | akshare/stock_feature/stock_board_industry_ths.py | 0 | 获取 js 文件的内容 :param file: js 文件名 :type file: str :return: 文件内容 :rtype: str | STRING |
| HIGH | akshare/stock_feature/stock_technology_ths.py | 0 | 获取 js 文件的内容 :param file: js 文件名 :type file: str :return: 文件内容 :rtype: str | STRING |
| HIGH | akshare/stock_feature/stock_board_concept_ths.py | 0 | 获取 js 文件的内容 :param file: js 文件名 :type file: str :return: 文件内容 :rtype: str | STRING |
| HIGH | akshare/stock_feature/stock_fund_flow.py | 0 | 获取 js 文件的内容 :param file: js 文件名 :type file: str :return: 文件内容 :rtype: str | STRING |
| HIGH | akshare/fund/fund_report_cninfo.py | 0 | 获取 js 文件的内容 :param file: js 文件名 :type file: str :return: 文件内容 :rtype: str | STRING |
| HIGH | akshare/economic/macro_china_hk.py | 0 | 东方财富-数据中心-经济数据一览-宏观经济-德国-核心代码 https://data.eastmoney.com/cjsj/foreign_1_0.html :param symbol: 代码 :type symbol: str :retu | STRING |
| HIGH | akshare/economic/macro_japan.py | 0 | 东方财富-数据中心-经济数据一览-宏观经济-德国-核心代码 https://data.eastmoney.com/cjsj/foreign_1_0.html :param symbol: 代码 :type symbol: str :retu | STRING |
| HIGH | akshare/economic/macro_swiss.py | 0 | 东方财富-数据中心-经济数据一览-宏观经济-德国-核心代码 https://data.eastmoney.com/cjsj/foreign_1_0.html :param symbol: 代码 :type symbol: str :retu | STRING |
| HIGH | akshare/economic/macro_germany.py | 0 | 东方财富-数据中心-经济数据一览-宏观经济-德国-核心代码 https://data.eastmoney.com/cjsj/foreign_1_0.html :param symbol: 代码 :type symbol: str :retu | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | akshare/futures/futures_roll_yield.py | 157 | except: # noqa: E722 | CODE |
| HIGH | akshare/futures/cot.py | 352 | except: # noqa: E722 | CODE |
| HIGH | akshare/utils/demjson.py | 4837 | except JSONSkipHook: | CODE |
| HIGH | akshare/utils/demjson.py | 5751 | except JSONSkipHook: | CODE |
| HIGH | akshare/utils/demjson.py | 5890 | except JSONSkipHook: | CODE |
| HIGH | akshare/utils/demjson.py | 5912 | except AttributeError: | CODE |
| HIGH | akshare/utils/demjson.py | 5917 | except TypeError: | CODE |
| HIGH | akshare/utils/demjson.py | 6012 | except StopIteration: | CODE |
| HIGH | akshare/utils/demjson.py | 6095 | except JSONSkipHook: | CODE |
| HIGH | akshare/utils/demjson.py | 5370 | except JSONSkipHook: | CODE |
| HIGH | akshare/utils/demjson.py | 5380 | except JSONSkipHook: | CODE |
| HIGH | akshare/utils/demjson.py | 4109 | except JSONSkipHook: | CODE |
| HIGH | akshare/utils/demjson.py | 5975 | except JSONSkipHook: | CODE |
| HIGH | akshare/utils/demjson.py | 5982 | except JSONSkipHook: | CODE |
| HIGH | akshare/utils/demjson.py | 5028 | except JSONSkipHook: | CODE |
| HIGH | akshare/utils/demjson.py | 5038 | except JSONSkipHook: | CODE |
| HIGH | akshare/stock/stock_zh_a_sina.py | 194 | except: # noqa: E722 | CODE |
| HIGH | akshare/stock/stock_zh_a_sina.py | 199 | except: # noqa: E722 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/check_punctuation.py | 326 | CODE | |
| LOW | scripts/check_punctuation.py | 419 | CODE | |
| LOW | akshare/request.py | 10 | CODE | |
| LOW | akshare/request.py | 65 | CODE | |
| LOW | akshare/stock_fundamental/stock_profit_forecast_ths.py | 17 | CODE | |
| LOW | akshare/stock_fundamental/stock_notice.py | 17 | CODE | |
| LOW | …re/stock_fundamental/stock_profit_forecast_hk_etnet.py | 15 | CODE | |
| LOW | akshare/stock_fundamental/stock_finance_ths.py | 194 | CODE | |
| LOW | akshare/stock_fundamental/stock_finance_ths.py | 291 | CODE | |
| LOW | akshare/stock_fundamental/stock_finance_ths.py | 388 | CODE | |
| LOW | akshare/stock_fundamental/stock_finance_ths.py | 485 | CODE | |
| LOW | akshare/futures/futures_comm_qihuo.py | 172 | CODE | |
| LOW | akshare/futures/futures_daily_bar.py | 24 | CODE | |
| LOW | akshare/futures/futures_daily_bar.py | 341 | CODE | |
| LOW | akshare/futures/futures_daily_bar.py | 637 | CODE | |
| LOW | akshare/futures/futures_warehouse_receipt.py | 115 | CODE | |
| LOW | akshare/futures/futures_warehouse_receipt.py | 206 | CODE | |
| LOW | akshare/futures/futures_basis.py | 79 | CODE | |
| LOW | akshare/futures/futures_basis.py | 146 | CODE | |
| LOW | akshare/futures/futures_roll_yield.py | 74 | CODE | |
| LOW | akshare/futures/requests_fun.py | 16 | CODE | |
| LOW | akshare/futures/requests_fun.py | 53 | CODE | |
| LOW | akshare/futures/cot.py | 110 | CODE | |
| LOW | akshare/futures/cot.py | 566 | CODE | |
| LOW | akshare/futures/cot.py | 818 | CODE | |
| LOW | akshare/futures/cot.py | 1052 | CODE | |
| LOW | akshare/futures/receipt.py | 82 | CODE | |
| LOW | akshare/futures/receipt.py | 386 | CODE | |
| LOW | akshare/futures/receipt.py | 571 | CODE | |
| LOW | akshare/futures/futures_settle.py | 59 | CODE | |
| LOW | akshare/futures/futures_settle.py | 481 | CODE | |
| LOW | akshare/futures/cons.py | 522 | CODE | |
| LOW | akshare/bank/bank_cbirc_2020.py | 111 | CODE | |
| LOW | akshare/bond/bond_zh_cov.py | 542 | CODE | |
| LOW | akshare/economic/macro_china_nbs.py | 300 | CODE | |
| LOW | akshare/economic/macro_china_nbs.py | 385 | CODE | |
| LOW | akshare/economic/macro_china_nbs.py | 566 | CODE | |
| LOW | akshare/economic/macro_china.py | 318 | CODE | |
| LOW | akshare/other/other_car_cpca.py | 13 | CODE | |
| LOW | akshare/other/other_car_cpca.py | 163 | CODE | |
| LOW | akshare/other/other_car_cpca.py | 276 | CODE | |
| LOW | akshare/other/other_car_cpca.py | 412 | CODE | |
| LOW | akshare/other/other_car_cpca.py | 528 | CODE | |
| LOW | akshare/other/other_car_cpca.py | 685 | CODE | |
| LOW | akshare/other/other_car_cpca.py | 722 | CODE | |
| LOW | akshare/utils/demjson.py | 79 | CODE | |
| LOW | akshare/utils/demjson.py | 275 | CODE | |
| LOW | akshare/utils/demjson.py | 3068 | CODE | |
| LOW | akshare/utils/demjson.py | 6182 | CODE | |
| LOW | akshare/utils/demjson.py | 718 | CODE | |
| LOW | akshare/utils/demjson.py | 853 | CODE | |
| LOW | akshare/utils/demjson.py | 943 | CODE | |
| LOW | akshare/utils/demjson.py | 1270 | CODE | |
| LOW | akshare/utils/demjson.py | 1516 | CODE | |
| LOW | akshare/utils/demjson.py | 2234 | CODE | |
| LOW | akshare/utils/demjson.py | 2715 | CODE | |
| LOW | akshare/utils/demjson.py | 2835 | CODE | |
| LOW | akshare/utils/demjson.py | 3265 | CODE | |
| LOW | akshare/utils/demjson.py | 3456 | CODE | |
| LOW | akshare/utils/demjson.py | 3521 | CODE | |
| 43 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | akshare/other/other_taptap.py | 15 | # ============================================================ | COMMENT |
| MEDIUM | akshare/other/other_taptap.py | 17 | # ============================================================ | COMMENT |
| MEDIUM⚡ | akshare/utils/demjson.py | 236 | # ---------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | akshare/utils/demjson.py | 784 | # ---------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | akshare/utils/demjson.py | 786 | # ---------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | akshare/utils/demjson.py | 1042 | # ---------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | akshare/utils/demjson.py | 1044 | # ---------------------------------------------------------------------- | COMMENT |
| MEDIUM | akshare/utils/demjson.py | 43 | # ---------------------------------------------------------------------- | COMMENT |
| MEDIUM | akshare/utils/demjson.py | 62 | # ---------------------------------------------------------------------- | COMMENT |
| MEDIUM | akshare/utils/demjson.py | 264 | # ---------------------------------------------------------------------- | COMMENT |
| MEDIUM | akshare/utils/demjson.py | 681 | # ---------------------------------------------------------------------- | COMMENT |
| MEDIUM | akshare/utils/demjson.py | 738 | # ---------------------------------------------------------------------- | COMMENT |
| MEDIUM | akshare/utils/demjson.py | 1590 | # ---------------------------------------------------------------------- | COMMENT |
| MEDIUM | akshare/utils/demjson.py | 1592 | # ---------------------------------------------------------------------- | COMMENT |
| MEDIUM | akshare/utils/demjson.py | 1753 | # ---------------------------------------------------------------------- | COMMENT |
| MEDIUM | akshare/utils/demjson.py | 1755 | # ---------------------------------------------------------------------- | COMMENT |
| MEDIUM | akshare/utils/demjson.py | 2182 | # ---------------------------------------------------------------------- | COMMENT |
| MEDIUM | akshare/utils/demjson.py | 2184 | # ---------------------------------------------------------------------- | COMMENT |
| MEDIUM | akshare/utils/demjson.py | 2400 | # ---------------------------------------------------------------------- | COMMENT |
| MEDIUM | akshare/utils/demjson.py | 2402 | # ---------------------------------------------------------------------- | COMMENT |
| MEDIUM | akshare/utils/demjson.py | 2453 | # ---------------------------------------------------------------------- | COMMENT |
| MEDIUM | akshare/utils/demjson.py | 2455 | # ---------------------------------------------------------------------- | COMMENT |
| MEDIUM | akshare/utils/demjson.py | 2602 | # ---------------------------------------------------------------------- | COMMENT |
| MEDIUM | akshare/utils/demjson.py | 2604 | # ---------------------------------------------------------------------- | COMMENT |
| MEDIUM | akshare/utils/demjson.py | 2869 | # ---------------------------------------------------------------------- | COMMENT |
| MEDIUM | akshare/utils/demjson.py | 2871 | # ---------------------------------------------------------------------- | COMMENT |
| MEDIUM | akshare/utils/demjson.py | 3706 | # ---------------------------------------------------------------------- | COMMENT |
| MEDIUM | akshare/utils/demjson.py | 3708 | # ---------------------------------------------------------------------- | COMMENT |
| MEDIUM | akshare/utils/demjson.py | 6106 | # ------------------------------ | COMMENT |
| MEDIUM | akshare/utils/demjson.py | 6408 | # ====================================================================== | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docs/registry.md | 154 | except Exception as e: | CODE |
| LOW | akshare/stock_fundamental/stock_ipo_review.py | 66 | except Exception as e: | CODE |
| LOW | akshare/stock_fundamental/stock_finance_sina.py | 603 | except Exception as e: | CODE |
| LOW | akshare/stock_fundamental/stock_finance_sina.py | 673 | except Exception as e: | CODE |
| LOW | akshare/stock_fundamental/stock_finance_sina.py | 745 | except Exception as e: | CODE |
| LOW | akshare/stock_fundamental/stock_ipo_tutor.py | 68 | except Exception as e: | CODE |
| LOW | akshare/futures/futures_basis.py | 132 | except Exception as e: # noqa: E722 | CODE |
| MEDIUM | akshare/economic/macro_bank.py | 77 | print(f"Error fetching data: {e}") | CODE |
| MEDIUM | akshare/utils/demjson.py | 1797 | def restore_position(self): | CODE |
| LOW | akshare/utils/demjson.py | 1838 | except Exception as err: | CODE |
| LOW | akshare/utils/demjson.py | 2657 | except Exception as err: | CODE |
| LOW | akshare/utils/demjson.py | 3954 | except Exception as err: | CODE |
| LOW | akshare/utils/demjson.py | 5784 | except Exception: | CODE |
| LOW | akshare/utils/demjson.py | 6599 | except Exception as err: | CODE |
| LOW | akshare/utils/demjson.py | 6378 | except Exception: | STRING |
| LOW | akshare/utils/demjson.py | 6396 | except Exception: | STRING |
| LOW | akshare/news/news_baidu.py | 124 | except Exception as e: | CODE |
| LOW⚡ | akshare/stock/stock_us_sina.py | 174 | except Exception: | CODE |
| LOW⚡ | akshare/stock/stock_us_sina.py | 178 | except Exception as e: | CODE |
| LOW⚡ | akshare/stock/stock_us_sina.py | 183 | except Exception: | CODE |
| LOW⚡ | akshare/stock/stock_us_sina.py | 187 | except Exception as e: | CODE |
| LOW | akshare/stock/stock_zh_kcb_sina.py | 156 | except Exception: | CODE |
| LOW | akshare/stock/stock_zh_kcb_sina.py | 160 | except Exception as e: | CODE |
| LOW | akshare/stock/stock_zh_kcb_sina.py | 197 | except Exception: | CODE |
| LOW | akshare/stock/stock_zh_kcb_sina.py | 201 | except Exception as e: | CODE |
| LOW | akshare/stock/stock_zh_kcb_sina.py | 228 | except Exception: | CODE |
| LOW | akshare/stock/stock_zh_kcb_sina.py | 232 | except Exception as e: | CODE |
| LOW | akshare/fund/fund_fee_em.py | 55 | except Exception as e: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | pyproject.toml | 61 | COMMENT | |
| LOW | pyproject.toml | 181 | docstring-code-format = false | COMMENT |
| LOW | docs/requirements.txt | 1 | # 文档构建依赖的唯一声明处,由 .readthedocs.yaml 的 python.install 直接引用。 | COMMENT |
| LOW | docs/conf.py | 61 | # Markdown 表格,而 myst_parser 原生渲染 GFM 表格(本文档有 16000+ 行表格)。 | COMMENT |
| LOW | docs/conf.py | 81 | # The theme to use for HTML and HTML Help pages. See the documentation for | COMMENT |
| LOW | scripts/build_registry.py | 101 | record = parse_segment(text[match.end() : end]) | COMMENT |
| LOW | .github/dependabot.yml | 1 | # Dependabot 配置 | COMMENT |
| LOW | akshare/cal/rv.py | 121 | # yang_zhang_rv formula is give as: | COMMENT |
| LOW | akshare/fund/fund_etf_em.py | 341 | :rtype: pandas.DataFrame | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | akshare/movie/movie_yien.py | 77 | CODE | |
| LOW | akshare/movie/video_yien.py | 62 | CODE | |
| LOW | akshare/movie/artist_yien.py | 62 | CODE | |
| LOW | akshare/futures/cot.py | 405 | CODE | |
| LOW | akshare/bond/bond_info_cm.py | 65 | CODE | |
| LOW | akshare/utils/demjson.py | 6179 | CODE | |
| LOW | akshare/utils/demjson.py | 6565 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | akshare/__init__.py | 5999 | __all__ = [ | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | akshare/utils/demjson.py | 6062 | """This method is used to encode user-defined class objects. | STRING |
| MEDIUM | akshare/utils/demjson.py | 6287 | # Initialize the JSON object | STRING |