检查CMD的参数是否已写入Python



我是python的新手html身体也。

我写的代码:

import sys
import urllib.request
url = 'https://%s' % (sys.argv[1])
res = urllib.request.urlopen(url)
print('Response from the server:'+'n', res.info())
print('HTML web page:'+'n', res.read())

现在,我想检查是否通过CMD传递一个参数,并且是否不警报。并打印状态代码和原因。确切的原因是什么意思?这就是我到目前为止得到的,我不明白为什么我没有得到任何结果。

我当前的代码是:

import sys
import urllib.request, urllib.error
try:
    url = 'https://%s' % (sys.argv[1])
    res = urllib.request.urlopen(url)
except IndexError:
    if len(sys.argv) < 1:
        print(res.getcode())
        print(res.getreason())
    elif len(sys.argv) > 1:
        print('Response from the server:'+'n', res.info())
        print('HTML web page:'+'n', res.read())
        print('Status Code:', res.getcode())

谢谢。

except块只有在命令行中不提供任何参数时才会执行。仅当提高indexError异常时,我相信只有在该用语中打印错误消息就足够了。打印语句应在try块内处理。

import sys
import urllib
from urllib2 import URLError
try:
    url = 'https://%s' % (sys.argv[1])
    #url = r'https://www.google.com'
    res = urllib.urlopen(url)
    print('Response from the server:' + 'n', res.info())
    print('HTML web page:' + 'n', res.read())
    print('Status Code:', res.getcode())
except IndexError as e:
    print e.message
except URLError as e1:
    print e1.reason

注意:我正在使用Python 2.7。因此,我没有使用urllib.request.urlopen(),因为这在Python 2.x

中没有必要

您仅检查len(sys.argv) < 1 or len(sys.argv) > 1是否是否且 len(sys.argv) == 1是否从不参与脚本,因为sys.argv[0]是脚本的名称。

此外,如果您使用except IndexError,则本质上是处理(或应该处理)例外,因此Python退出而不会出错而不会在您的if-elif条款中遇到任何情况。

您可以做这样的事情:

import sys
import urllib
try:
    url = 'https://%s' % (sys.argv[1])
    res = urllib.request.urlopen(url)
except IndexError:
    if len(sys.argv) <= 1:
        print("Too few arguments")
        raise # <- or replace with sys.exit(1) if you don't want to propagate the exception

实际urllib.request.urlopen(url)可能会抛出其他例外。我会谨慎处理与HTTP请求相同的try-except块中的命令行参数。

最新更新