{"id":13469358,"url":"https://github.com/ajalt/fuckitpy","last_synced_at":"2026-10-18T23:48:55.126Z","repository":{"id":37318881,"uuid":"10849933","full_name":"ajalt/fuckitpy","owner":"ajalt","description":"The Python error steamroller.","archived":false,"fork":false,"pushed_at":"2023-08-12T15:18:44.000Z","size":32,"stargazers_count":5292,"open_issues_count":13,"forks_count":178,"subscribers_count":86,"default_branch":"master","last_synced_at":"2026-08-12T09:50:09.778Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ajalt.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2013-06-21T18:52:33.000Z","updated_at":"2026-08-10T09:40:32.000Z","dependencies_parsed_at":"2024-01-18T13:33:23.470Z","dependency_job_id":"73270a11-9c88-495d-b739-212adfc57ee8","html_url":"https://github.com/ajalt/fuckitpy","commit_stats":{"total_commits":45,"total_committers":9,"mean_commits":5.0,"dds":0.2222222222222222,"last_synced_commit":"0b9c0df8e597d89cab4d8c12eec9b8a0e2f2b4fc"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ajalt/fuckitpy","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ajalt%2Ffuckitpy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ajalt%2Ffuckitpy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ajalt%2Ffuckitpy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ajalt%2Ffuckitpy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ajalt","download_url":"https://codeload.github.com/ajalt/fuckitpy/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ajalt%2Ffuckitpy/sbom","scorecard":{"id":174116,"data":{"date":"2025-08-11","repo":{"name":"github.com/ajalt/fuckitpy","commit":"0b9c0df8e597d89cab4d8c12eec9b8a0e2f2b4fc"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.9,"checks":[{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Code-Review","score":2,"reason":"Found 7/28 approved changesets -- score normalized to 2","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":0,"reason":"license file not detected","details":["Warn: project does not have a license file"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 9 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-16T17:17:48.651Z","repository_id":37318881,"created_at":"2025-08-16T17:17:48.652Z","updated_at":"2025-08-16T17:17:48.652Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":344872684,"owners_count":38343425,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-10-03T21:59:58.778Z","status":"online","status_checked_at":"2026-10-18T02:00:06.448Z","response_time":63,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-07-31T15:01:35.742Z","updated_at":"2026-10-18T23:48:54.859Z","avatar_url":"https://github.com/ajalt.png","language":"Python","funding_links":[],"categories":["Python","Testing","Other","资源列表","Language","Awesome Python","GitHub Projects"],"sub_categories":["Scientific Computing","测试","Testing"],"readme":"# FuckIt.py\n\n[![Build Status](https://img.shields.io/travis/ajalt/fuckitpy/master.svg)](https://travis-ci.org/ajalt/fuckitpy)\n[![PyPI version](.web/pypibadge.svg)](https://pypi.python.org/pypi/fuckit/4.8.1)\n[![Coverage Status](https://img.shields.io/badge/coverage-110%25-brightgreen.svg)](https://coveralls.io/r/ajalt/fuckitpy?branch=master)\n[![Downloads](https://img.shields.io/badge/downloads-1.1M%2Fmonth-brightgreen.svg)](https://pypi.python.org/pypi/fuckit)\n\n### The Python Error Steamroller\nFuckIt.py uses state-of-the-art technology to make sure your Python code runs\nwhether it has any right to or not. Some code has an error? Fuck it.\n\n## Technology\nFuckIt.py uses a combination of dynamic compilation, Abstract Syntax Tree rewriting, live call stack modification, and love to get rid of all those pesky errors that make programming _so hard_.\n\n## API\nAll functionality is provided through the fuckit module. Add `import fuckit` to the top of your script, then use fuckit in any of the following ways:\n\n### As a replacement for import\nUse fuckit to replace an import when a module has errors.\nJust change `import some_shitty_module` to `fuckit('some_shitty_module')`. Note that you have to surround the module name with quotes and parentheses.\n\n```python\nimport fuckit\n#import some_shitty_module\nfuckit('some_shitty_module')\nsome_shitty_module.some_function()\n```\n\nStill getting errors? Chain fuckit calls. This module is like violence: if it doesn't work, you just need more of it.\n\n```python\nimport fuckit\nfuckit(fuckit('some_shitty_module'))\n# This is definitely going to run now.\nsome_shitty_module.some_function()\n```\n\n### As a decorator\nUse fuckit as a function decorator when a single function is giving you trouble. Exceptions will be silenced, and in most cases the function will continue to run, skipping the statements that cause errors.\n\n```python\n@fuckit\ndef func():\n    problem_solved\n```\n\nYou can use fuckit as a class decorator, too.\n\n```python\n@fuckit\nclass C(object):\n    def __init__(self):\n        everything_works_now\n```\n\nKeep in mind that the decorator form of fuckit can't stop syntax errors. For those, you have to use the import form.\n\n### As a context manager\nUse fuckit as a context manager to save yourself from having to type out try/except block to silence exceptions yourself.\n\n```python\nwith fuckit:\n    some_code\n```\n\nThis is functionally equivalent to the following:\n\n```python\ntry:\n    some_code\nexcept Exception:\n    pass\n```\n\nThe context manager form of fuckit can't allow the code to continue past an error like the decorator and import forms can. If you want the code to continue after an exception, wrap the code block in a function and use the decorator instead.\n\n## Versioning\n\nThe web devs tell me that fuckit's versioning scheme is confusing, and that I should use \"Semitic Versioning\" instead. So starting with fuckit version `ה.ג.א`, package versions will use Hebrew Numerals.\n\n\n## License\n\nCopyright (C) 2014-2018 AJ Alt\n\nThis work is free. You can redistribute it and/or modify it under the\nterms of the Do What The Fuck You Want To Public License, Version 2,\nreproduced below.\n\n                DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE\n                       Version 2, December 2004\n\n\tCopyright (C) 2004 Sam Hocevar \u003csam@hocevar.net\u003e\n\n\tEveryone is permitted to copy and distribute verbatim or modified\n\tcopies of this license document, and changing it is allowed as long\n\tas the name is changed.\n\n                DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE\n       TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\n\n \t0. You just DO WHAT THE FUCK YOU WANT TO.\n\n## Attribution\n\nThis module is inspired by Matt Diamond's [FuckIt.js](https://github.com/mattdiamond/fuckitjs).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fajalt%2Ffuckitpy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fajalt%2Ffuckitpy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fajalt%2Ffuckitpy/lists"}