Comments (4)
No, Not sure how this got broken, there was (and still must be) a check that shorthand argument is one character long. (err if 0 > len(sn) > 1 because it can be 0 too).
from argparse.
Ooh... I've got it.
If you create an argument with wrong description, like in my case - long name for a shorthand argument, library refuses this argument's description silently. Later, when you try to use it, there will be 'unknown arguments' error. This is OK.
But in the case of Options with Required: false and some Default value, it will be another default value on Parse return (default value of the requested type).
That's because of pointer's creation and returning independently of o.addArg execution status.
So, in case of using of Option Required: false and some error on o.addArg you will get unexpected value (default for type instead of Default by options) without any alarm. It's not good.
I see next variants:
- build the complete error chain from addArg to user (in this case user will have to check error after each argument creation).
- in case of o.addArg failure - return nil pointer, so the user's program will panic on attemption to use it
- panic on o.addArg failure (this may take sance, because this is a case of error in user programm).
- or just let it go))
I like 2 and 3, but Interested in your opinion.
from argparse.
To be honest I don't like 2 because of nil pointer, perhaps that is the legacy of hating nullptr from C/C++. I'd argue that if method promises to return a specific type it must try its best to return that instead of nil (except errors I guess).
I would prefer to separate a developer (who would use this library in their application) and actual application user. Letting application crash with null pointer dereference exception while user runs application is not nice. User may have no knowledge of application internals and may have 0 idea why it suddenly failed.
Instead I would prefer to have a meaningful error message returned to the developer (or user if developer did not handle this) and have it contain a message of why it failed.
If it is a developer mistake -- they should be able to catch this during their testing. If a user mistake they should see a clear explanation to their mistake.
Back to this case -- I think this library should do its best effort to get a correct input. If shorthand handle for an argument should be limited to a single character -- this must be done by the means inside library in a clear way. For example it could panic inside NewInt
when shorthand is longer than 1 character (before pointer is even returned). Or it could simply accept a byte in string format. Or some other way.
from argparse.
I think that was done in #57
feel free to close if this is resolved
from argparse.
Related Issues (20)
- How do I make a hidden argument? HOT 1
- enable required for positionals HOT 5
- SelectorList flag HOT 2
- Golang Argparse not picking correct value for multiple flags HOT 1
- Allow parser.ParseKnownArgs(...) HOT 2
- How do you get >=0 positionals? HOT 2
- [BUG] v1.4.0 args does not happened when subcommand exists
- Positional args HOT 2
- Creating commands in a type HOT 1
- Add compatibility with complete library [ bash completions ] HOT 1
- Auto complete subcommands HOT 1
- [bug] Unable to detect if file flag was actually provided? HOT 7
- subparser not implemented HOT 1
- Provide ability to configure helptext maxWidth columns HOT 9
- Getting: import cycle not allowed using the example. HOT 1
- Provide <META> fields and Author Information in usage string HOT 2
- Question about returned parameters (not a bug report) HOT 1
- FlagCounter display unexpectedly HOT 1
- expect File arg to take standard input / output stream as a value HOT 2
- Options.Default should be ignored for Flag HOT 4
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 argparse.