【问题标题】:image_url = sys.argv[1] IndexError: list index out of rangeimage_url = sys.argv[1] IndexError: 列表索引超出范围
【发布时间】:2019-01-14 19:28:49
【问题描述】:

我对以下 Python 代码部分有疑问:

import sys  
import requests  
import firebase_admin  
from firebase_admin import credentials  
from firebase_admin import storage  
image_url = sys.argv[1]  
cred = credentials.Certificate('certificate.json')  
firebase_admin.initialize_app(cred,{'storageBucket':'gs://rpi-demo-6d21d.appspot.com'})  
bucket = storage.bucket()  
image_data = requests.get(image_url).content  
blob = bucket.blob('happy.jpg')  
blob.upload_from_string(image_data,content_type='image/jpg')  
print(blob.public_url)

具体报错如下:

Traceback (most recent call last):
File "demo4.py", line 6, in <module>
image_url = sys.argv[1]
IndexError: list index out of range

【问题讨论】:

  • 错误是说您在调用它时没有将参数传递给demo4.py。确保在调用它时传递所有必需的参数 - python demo4.py &lt;url_goes_here&gt;.
  • 你能帮我举几个例子吗?
  • 我们经常使用if sys.argv[1:]: x = sys.argv[1]。换句话说,在尝试访问元素之前,首先检查sys 是否足够大。如果它不够大,请定义某种默认值,或引发错误。如果您在尝试使用它之前print(sys.argv) 可能会有所帮助。尝试各种输入。
  • 好吧,我已经为您的命令提供了一个示例,但一个更小的示例是:您可以将import sys print(sys.argv[1]) 放入demo.py 并尝试使用python demo.py 运行它。你会得到$ python demo.py Traceback (most recent call last): File "demo.py", line 3, in &lt;module&gt; print(sys.argv[1]) IndexError: list index out of range,但如果你添加一个命令行参数,你会得到正确的输出:$ python demo.py foo foo

标签: python firebase google-cloud-firestore


【解决方案1】:

sys.argv list 是从传递给脚本的命令行参数中填充的,因此如果没有提供任何内容,预计会出现类似

的错误
Traceback (most recent call last):
File "demo4.py", line 6, in <module>
image_url = sys.argv[1]
IndexError: list index out of range

一个简单的复制是把

import sys
print(sys.argv[1])

demo.py 中并使用python demo.py 运行它。你会得到输出

$ python demo.py
Traceback (most recent call last):
  File "demo.py", line 2, in <module>
    print(sys.argv[1])
IndexError: list index out of range

但如果您使用 python demo.py foo 将参数传递给它,您将获得所需的输出:

$ python demo.py foo
foo

特别是对于您的示例,看起来在调用 demo4.py 脚本时您没有传递图像 url 命令行参数。您可以使用python demo4.py &lt;image_url_goes_here&gt; 传递它。

【讨论】:

  • image_url = sys.argv[1] #我们将url作为参数传递,如何传递url以及从哪里获取图像url,因为我想从本地存储上传图像?跨度>
  • @shashankpatel,您使用的脚本似乎正在将图像上传到云 blob 存储,因此您应该提供要上传的图像的 URL。
猜你喜欢
  • 2016-08-12
  • 1970-01-01
  • 2017-11-12
  • 2017-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多