Python 当我将脚本放入函数中时脚本停止工作
Python script stops working when I put it inside a function
一些背景知识:我在 Windows 10 计算机上使用 Python 2.7.12。
这是迄今为止我在 Python.
中遇到的最奇怪的问题之一
我编写了一个脚本,它向 API 发出 GET 请求,并获得正确的 headers,并取回一些 XML 数据。作为记录,当我将这样的脚本粘贴到 python 文件中并通过 CMD 运行 时,它工作得很好。
但是..
只要我将它包装在一个函数中,它就会停止工作。没有
否则,只需将其包装在一个函数中,然后使用
if __name__ == '__main__':
my_new_function()
从 CMD 到 运行 它不再起作用。它仍然 有效 但是 API 说我有错误的授权凭据,因此我没有得到任何数据。
我检查了这段代码中的每一段字符串,它们都是 ASCII 编码的。我也检查了时间戳,它们都是正确的。
这是我的脚本:
SECRET_KEY = 'YYY'
PUBLIC_KEY = 'XXX'
content_type = 'application/xml'
date = time.strftime('%a, %d %b %Y %H:%M:%S GMT', time.gmtime())
method = 'GET'
uri = '/uri'
msg = """{method}
{content_type}
{date}
x-bol-date:{date}
{uri}""".format(content_type=content_type,
date=date,
method=method,
uri=uri)
h = hmac.new(
SECRET_KEY,
msg, hashlib.sha256)
b64 = base64.b64encode(h.digest())
signature = PUBLIC_KEY + b':' + b64
headers = {'Content-Type': content_type,
'X-BOL-Date': date,
'X-BOL-Authorization': signature}
r = requests.get('example.com/uri', headers=headers)
函数内的相同代码:
def get_orders():
SECRET_KEY = 'XXX'
PUBLIC_KEY = 'YYY'
content_type = 'application/xml'
date = time.strftime('%a, %d %b %Y %H:%M:%S GMT', time.gmtime())
method = 'GET'
uri = '/uri'
msg = """{method}
{content_type}
{date}
x-bol-date:{date}
{uri}""".format(content_type=content_type,
date=date,
method=method,
uri=uri)
h = hmac.new(
SECRET_KEY,
msg, hashlib.sha256)
b64 = base64.b64encode(h.digest())
signature = PUBLIC_KEY + b':' + b64
headers = {'Content-Type': content_type,
'X-BOL-Date': date,
'X-BOL-Authorization': signature}
r = requests.get('example.com/uri', headers=headers)
if __name__ == '__main__':
get_orders()
我认为当您在函数中缩进时,您的多行字符串中会出现空格。而是将它连接在每一行上,它应该可以工作。
一些背景知识:我在 Windows 10 计算机上使用 Python 2.7.12。 这是迄今为止我在 Python.
中遇到的最奇怪的问题之一我编写了一个脚本,它向 API 发出 GET 请求,并获得正确的 headers,并取回一些 XML 数据。作为记录,当我将这样的脚本粘贴到 python 文件中并通过 CMD 运行 时,它工作得很好。
但是..
只要我将它包装在一个函数中,它就会停止工作。没有 否则,只需将其包装在一个函数中,然后使用
if __name__ == '__main__':
my_new_function()
从 CMD 到 运行 它不再起作用。它仍然 有效 但是 API 说我有错误的授权凭据,因此我没有得到任何数据。
我检查了这段代码中的每一段字符串,它们都是 ASCII 编码的。我也检查了时间戳,它们都是正确的。
这是我的脚本:
SECRET_KEY = 'YYY'
PUBLIC_KEY = 'XXX'
content_type = 'application/xml'
date = time.strftime('%a, %d %b %Y %H:%M:%S GMT', time.gmtime())
method = 'GET'
uri = '/uri'
msg = """{method}
{content_type}
{date}
x-bol-date:{date}
{uri}""".format(content_type=content_type,
date=date,
method=method,
uri=uri)
h = hmac.new(
SECRET_KEY,
msg, hashlib.sha256)
b64 = base64.b64encode(h.digest())
signature = PUBLIC_KEY + b':' + b64
headers = {'Content-Type': content_type,
'X-BOL-Date': date,
'X-BOL-Authorization': signature}
r = requests.get('example.com/uri', headers=headers)
函数内的相同代码:
def get_orders():
SECRET_KEY = 'XXX'
PUBLIC_KEY = 'YYY'
content_type = 'application/xml'
date = time.strftime('%a, %d %b %Y %H:%M:%S GMT', time.gmtime())
method = 'GET'
uri = '/uri'
msg = """{method}
{content_type}
{date}
x-bol-date:{date}
{uri}""".format(content_type=content_type,
date=date,
method=method,
uri=uri)
h = hmac.new(
SECRET_KEY,
msg, hashlib.sha256)
b64 = base64.b64encode(h.digest())
signature = PUBLIC_KEY + b':' + b64
headers = {'Content-Type': content_type,
'X-BOL-Date': date,
'X-BOL-Authorization': signature}
r = requests.get('example.com/uri', headers=headers)
if __name__ == '__main__':
get_orders()
我认为当您在函数中缩进时,您的多行字符串中会出现空格。而是将它连接在每一行上,它应该可以工作。