TypeError:当我尝试在parse.parse_args()中传递三个参数时,'int'对象不可订阅
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TypeError:当我尝试在parse.parse_args()中传递三个参数时,'int'对象不可订阅相关的知识,希望对你有一定的参考价值。
ap = argparse.ArgumentParser()
ap.add_argument("-i", "--image", help="Path to input image", required=True)
ap.add_argument("-p", "--pivot-point", help="Pivot point coordinates x, y separated by comma (,)", required=True)
ap.add_argument("-s", "--scale", help="Scale to zoom", type = int, required=True)
args = vars(ap.parse_args(['image.jpeg', '(144,72)', 3]))
你好,
我试图在参数中传递一个图像来旋转它并缩放它以通过argparse进行缩放。
但是我收到以下错误:
请让我知道你做错了什么。
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-131-c7157827dce9> in <module>()
3 ap.add_argument("-p", "--pivot-point", help="Pivot point coordinates x, y separated by comma (,)", required=True)
4 ap.add_argument("-s", "--scale", help="Scale to zoom", type = int, required=True)
----> 5 args = vars(ap.parse_args(['image.jpeg', '(144,72)', 3]))
~/anaconda3/lib/python3.6/argparse.py in parse_args(self, args, namespace)
1728 # =====================================
1729 def parse_args(self, args=None, namespace=None):
-> 1730 args, argv = self.parse_known_args(args, namespace)
1731 if argv:
1732 msg = _('unrecognized arguments: %s')
~/anaconda3/lib/python3.6/argparse.py in parse_known_args(self, args, namespace)
1760 # parse the arguments and exit if there are any errors
1761 try:
-> 1762 namespace, args = self._parse_known_args(args, namespace)
1763 if hasattr(namespace, _UNRECOGNIZED_ARGS_ATTR):
1764 args.extend(getattr(namespace, _UNRECOGNIZED_ARGS_ATTR))
~/anaconda3/lib/python3.6/argparse.py in _parse_known_args(self, arg_strings, namespace)
1801 # and note the index if it was an option
1802 else:
-> 1803 option_tuple = self._parse_optional(arg_string)
1804 if option_tuple is None:
1805 pattern = 'A'
~/anaconda3/lib/python3.6/argparse.py in _parse_optional(self, arg_string)
2087
2088 # if it doesn't start with a prefix, it was meant to be positional
-> 2089 if not arg_string[0] in self.prefix_chars:
2090 return None
2091
TypeError: 'int' object is not subscriptable
解析器通常处理sys.argv[1:]
,它是shell生成的字符串列表。使用您自己的列表进行测试也需要字符串。注意使用'3'而不是3
。
In [182]: ap.parse_args(['image.jpeg', '(144,72)', '3'])
usage: ipython3 [-h] -i IMAGE -p PIVOT_POINT -s SCALE
ipython3: error: the following arguments are required: -i/--image, -p/--pivot-point, -s/--scale
An exception has occurred, use %tb to see the full traceback.
SystemExit: 2
现在它给出了标准化的argparse
错误以及使用和有用的诊断。
如果我们提供您告诉它期望的短选项标志:
In [183]: ap.parse_args(['-i','image.jpeg', '-p','(144,72)', '-s' '3'])
Out[183]: Namespace(image='image.jpeg', pivot_point='(144,72)', scale=3)
In [184]: vars(_)
Out[184]: {'image': 'image.jpeg', 'pivot_point': '(144,72)', 'scale': 3}
或者我们可以使用split
更清楚地了解正确的命令行将是什么样子:
In [186]: ap.parse_args("-i image.jpeg -p (144,72) -s 3".split())
Out[186]: Namespace(image='image.jpeg', pivot_point='(144,72)', scale=3)
由于您已将-s
定义为type=int
,因此它将字符串“3”转换为整数。
对于-p
你可能想尝试nargs=2
,允许你使用'-p 144 72'。
同
ap.add_argument("-p", "--pivot-point", nargs=2, metavar=('x','y'),
type=int, help="Pivot point coordinates")
我明白了:
In [196]: ap.print_help()
usage: ipython3 [-h] -i IMAGE -p x y -s SCALE
optional arguments:
-h, --help show this help message and exit
-i IMAGE, --image IMAGE
Path to input image
-p x y, --pivot-point x y
Pivot point coordinates
-s SCALE, --scale SCALE
Scale to zoom
In [197]: ap.parse_args("-i image.jpeg -p 144 72 -s 3".split())
Out[197]: Namespace(image='image.jpeg', pivot_point=[144, 72], scale=3)
更换
args = vars(ap.parse_args(['image.jpeg', '(144,72)', 3]))
同
args = vars(ap.parse_args(['image.jpeg', '(144,72)', '3'])) #string '3'. 'type = int' will convert it to an int object
列表中传递给parse_args的所有元素都需要是字符串,由参数解析器决定将字符串解释为您设置的类型。
以上是关于TypeError:当我尝试在parse.parse_args()中传递三个参数时,'int'对象不可订阅的主要内容,如果未能解决你的问题,请参考以下文章
当我尝试测试 react-bootstrap 组件时,我得到 TypeError: Enzyme::Selector expects a string, object, or Component Co
TypeError:尝试上传图像时无法读取未定义的属性“路径”
尝试在 Keras 中创建 BLSTM 网络时出现 TypeError
TypeError:无法读取reactjs中未定义的属性“长度”