簡體   English   中英

如何解決這類KeyError?

[英]How to solve this type of KeyError?

我正在嘗試編寫一個程序來刮取圖像以創建用於神經網絡的數據集,但是我遇到了一些問題

這是代碼:

from imutils import paths
import argparse
import requests
import cv2
import os

ap = argparse.ArgumentParser()
ap.add_argument("-u", "--C:/Users/artus/datasets/urls.txt", 
                required=False, help="path containing URLs")
ap.add_argument("-o", "--C:/Users/artus/datasets/ShoesImage", 
                required=False, help="folder for downloaded images")
args = vars(ap.parse_args())

# grab the list of URLs from the input file, then initialize the
# total number of images downloaded thus far
rows = open(args["urls"]).read().strip().split("\n")
total = 0

執行時,應從urls.txt文件中指定的url下載所有圖像,但是出現此錯誤:

Traceback (most recent call last):
   File "C:/Users/artus/untitled5/imagescraping.py", line 16, in <module>
    rows = open(args["urls"]).read().strip().split("\n")
KeyError: 'urls'

add_argument的第二個參數是該參數的“長名稱”。 對於第一個參數,您將傳遞--urls ,然后argparse將使用戶傳遞的值作為args["urls"]可用:

# ...
ap.add_argument("-u", "--urls", type=str,
                required=False, help="path containing URLs")

然后,在命令行中傳遞參數:

python imagescraping.py --urls C:/Users/artus/datasets/urls.txt

另外,我認為您不需要將其包裝在vars

當我將您的argparse代碼復制-n-粘貼到腳本中時:

import argparse
ap = argparse.ArgumentParser()
ap.add_argument("-u", "--C:/Users/artus/datasets/urls.txt", 
                required=False, help="path containing URLs")
ap.add_argument("-o", "--C:/Users/artus/datasets/ShoesImage", 
                required=False, help="folder for downloaded images")
args = ap.parse_args()
print(args)

並在不帶參數的情況下調用它:

0923:~/mypy$ python3 stack56745387.py 
Namespace(**{'C:/Users/artus/datasets/ShoesImage': None, 'C:/Users/artus/datasets/urls.txt': None})

並尋求幫助:

1743:~/mypy$ python3 stack56745387.py -h
usage: stack56745387.py [-h] [-u C:/USERS/ARTUS/DATASETS/URLS.TXT]
                        [-o C:/USERS/ARTUS/DATASETS/SHOESIMAGE]

optional arguments:
  -h, --help            show this help message and exit
  -u C:/USERS/ARTUS/DATASETS/URLS.TXT, --C:/Users/artus/datasets/urls.txt C:/USERS/ARTUS/DATASETS/URLS.TXT
                        path containing URLs
  -o C:/USERS/ARTUS/DATASETS/SHOESIMAGE, --C:/Users/artus/datasets/ShoesImage C:/USERS/ARTUS/DATASETS/SHOESIMAGE
                        folder for downloaded images

您可能希望“ --C:/Users/artus/datasets/urls.txt”類似於默認值,但您將其定義為該參數的long標志和dest (您的設置中沒有將urls指定為所需的dest或key。)

您必須將其用作:

1750:~/mypy$ python3 stack56745387.py --C:/Users/artus/datasets/urls.txt foobar
Namespace(**{'C:/Users/artus/datasets/ShoesImage': None, 'C:/Users/artus/datasets/urls.txt': 'foobar'})

將代碼更改為:

import argparse
ap = argparse.ArgumentParser()
ap.add_argument("-u", "--urls", default="C:/Users/artus/datasets/urls.txt", 
                required=False, help="path containing URLs (default: %(default)s)")
ap.add_argument("-o", "--images",default="C:/Users/artus/datasets/ShoesImage", 
                required=False, help="folder for downloaded images (default: %(default)s)")
args = ap.parse_args()
print(args)

1802:~/mypy$ python3 stack56745387.py -h
usage: stack56745387.py [-h] [-u URLS] [-o IMAGES]

optional arguments:
  -h, --help            show this help message and exit
  -u URLS, --urls URLS  path containing URLs (default:
                        C:/Users/artus/datasets/urls.txt)
  -o IMAGES, --images IMAGES
                        folder for downloaded images (default:
                        C:/Users/artus/datasets/ShoesImage)
1803:~/mypy$ python3 stack56745387.py --urls foobar
Namespace(images='C:/Users/artus/datasets/ShoesImage', urls='foobar')

現在您可以使用args.urlsvars(args)['urls']

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM