python - 努力理解是什么导致了这个关键错误异常
问题描述
为了我的学习和发展,我决定学习 prgramming 并决定学习 python 我从使用以下教程的颜色检查应用程序开始
但是,每当我运行激活命令打开我的图像时,我都会收到以下错误
Traceback (most recent call last):
File "main.py", line 14, in <module>
PathToImage = args['colour_select']
KeyError: 'colour_select'
我对 python 比较陌生,所以这可能不是我的代码中唯一的错误。我很困惑这是如何发生的。
我的代码完整代码:
# imports
import cv2
import numpy as np
import pandas as pd
import argparse
# variable declaration
clicked = False
red = blue = green = xpos = ypos = 0
ap = argparse.ArgumentParser()
ap.add_argument('-i', required=True, help="PathToImage")
args = vars(ap.parse_args())
PathToImage = args['colour_select']
img = cv2.imread(PathToImage)
# read csv file
index = ["colour", "colour_name", "hex", "R", "G", "B"]
csv = pd.read('colours.csv', names=index, header=None)
cv2.namedWindow('colour_select')
cv2.setMouseCallback('colour_select', draw_function)
def draw_function(event, x, y, flags, parameters):
if event == cv2.EVENT_LBUTTONDBLCLK:
global blue, green, red, xpos, ypos, clicked
clicked = True
xpos = x
ypos = y
blue, green, red = img[x, y]
blue = int(blue)
green = int(green)
red = int(red)
def getColourName(red, green, blue):
minimum = 10000
for i in range(len(csv)):
distance = abs(red - int(csv.loc[i, "Red"])) + abs(green - int(csv.loc[i, "Green"])) + abs(
blue - int(csv.loc[i, "Blue"]))
if (distance <= minimum):
minimum = distance
ColourName = csv.loc[i, "colour_name"]
return ColourName
while (1):
cv2.imshow("colour_select", img)
if (clicked):
cv2.rectangle(img, (20, 20), (750, 60), (blue, green, red), -1)
text = getColourName(red, green, blue) + ' R=' + str(red) + 'G=' + str(green) + ' B+' + str(blue)
cv2.putText(img, text, (50, 50), 2, 0.8, (0, 0, 0), 2, cv2.LINE_AA)
if (red, blue, green >= 600):
cv2.putText(img, text, (50, 50), 2, 0.8, (0, 0, 0), 2, cv2.LINE_AA)
clicked = False
if cv2.waitKey(20) & 0xFF == 27:
break
cv2.destroyAllWindows()
一如既往地感谢任何和所有的帮助。
解决方案
我首先将问题的原因隔离到
import argparse
ap = argparse.ArgumentParser()
ap.add_argument('-i', required=True, help="PathToImage")
args = vars(ap.parse_args())
PathToImage = args['colour_select']
我将该代码放在“myscript.py”中并运行它;特别是我试过
python myscript.py -i "hello"
我能够重现该问题。为了找出原因,我添加了一个打印语句
import argparse
ap = argparse.ArgumentParser()
ap.add_argument('-i', required=True, help="PathToImage")
args = vars(ap.parse_args())
print(args)
PathToImage = args['colour_select']
命令行上显示的是{'i': 'hello'}
如果您希望密钥为colour_select
,则应将其用作参数字符串
import argparse
ap = argparse.ArgumentParser()
ap.add_argument('-colour_select', required=True, help="PathToImage")
args = vars(ap.parse_args())
if 'colour_select' not in args.keys():
print("ERROR!")
PathToImage = args['colour_select']
print('PathToImage =',PathToImage)
推荐阅读
- git - Git将忽略的目录显示为未跟踪
- hibernate - JPA:如何联合来自不同模式的表
- java - Java版本混淆需要设置JAVA_HOME为Java11
- css - 我对与 Transform 相关的分配有疑问
- vue.js - 将标头从 Apollo Vue 发送到 Node
- python - 与具有已知误差(即 x、y、ey)的输入训练数据共同区域化
- firebase - 避免用户在创建时使用 Firebase 登录
- javascript - Jasmine 业力单元测试中的模拟商店选择
- event-sourcing - EventStoreDB 是否通过消费者端的事件键提供消息排序?
- c# - MongoDB.Driver.MongoCommandException:命令 getMore 失败:BSONObj 大小:45888169 (0x2BC32A9) 无效。大小必须介于 0 和 16793600(16MB) 之间