Comments (4)
Also see discussion on #26
from mccabe.
Sorry for the confusion on #26. I agree that this is the right graph (with the exception of where the edges from the try body start for the except clauses.
from mccabe.
Should we get more buy-in before I submit a patch?
The quick hack I put in to make that diagram is pretty ugly.
from mccabe.
Note that this problem is not at all restricted to try-except constructs with an else clause. Where there is no 'else' the graph simply contains an edge going directly from the 'try' statement to the end of the block without passing through either the body of the try or any of the exception handlers.
This is a regression in 0.3 (and all later versions) - 0.2.1 generates the correct graph. I suspect but have not bothered to verify that this is due to 0a42f06
i.e. this function:
def test_try(s):
try:
return int(s)
except TypeError:
return -1
returns a cyclomatic complexity of 3 instead of 2 (consistent with 0.2.1, but only because of the off-by-one error #5 that was fixed); and this function:
def test_try2(s1, s2):
try:
i1 = int(s1)
except TypeError:
i1 = -1
try:
i2 = int(s2)
except TypeError:
i2 = -1
return i1, i2
returns a cyclomatic complexity of 5 instead of 3 (vs. 4 in 0.2.1 due to the aforementioned off-by-one error fix.)
Ergo functions whose complexity is dominated by try/except have values that are off by up to a factor of 2.
from mccabe.
Related Issues (20)
- Config: Ignore local functions HOT 1
- Allow setting max complexity per function HOT 1
- [docs] Incorrect date on release note for 0.7.0 HOT 1
- Improve error message on invalid use: `python -m mccabe`
- Error code when there are functions with complexity greater than the threshold
- Add support for pytest 7+ HOT 2
- Use setuptools.build_meta HOT 1
- RecursionError on long elif
- ignore guard clauses HOT 2
- "U" mode is no longer accepted from Python 3.9
- state project maintenance status HOT 2
- mccable should allow ranged noqa exceptions HOT 3
- optparse 'type' option no longer accepts strings HOT 1
- install offline mccabe with error HOT 1
- Release mccabe > 0.6.1 to remove pytest-runner requirement? HOT 1
- Some way to ignore specific marked branches for the purposes of the complexity measure HOT 1
- 0.7: test failure HOT 5
- [Proposal] Add a check for none/multiple positional arguments
- GitHub Action HOT 1
- [Proposal] Allow disabling "try-except" clauses evaluation. HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from mccabe.