AWS Lambda中的Python发出意外的unindent错误

时间:2017-07-29 00:56:21

标签: python amazon-web-services aws-lambda

当我尝试在Lambda中测试我的python函数时,我收到以下错误:

"errorMessage": "Syntax error in module 'lambda_function'"

CloudWatch日志中出现此错误:

Syntax error in module 'lambda_function': unexpected unindent (lambda_function.py, line 28)

这是我的python代码:

from __future__ import print_function
import urllib2 
from multiprocessing.dummy import Pool as ThreadPool 

import hashlib
import datetime
import json

print('Loading function')

def my_urlopen(url):
    try:
        return urllib2.urlopen(url)
    except Exception as e:
        try:
            return urllib2.urlopen(url)
        except Exception as e2:
            urllib2.urlopen("https://example.com/cron/error.php?url="+url+"&code="+str(e2.code));#+"&reason="+e2.reason);
            return None
        return None

def customer_list(cron_cipher, minute):
    try:
        return urllib2.urlopen("https://d-example.com:444/TESTcron.php?k="+cron_cipher+"&m="+minute+"&f=rules")
    except Exception as e:
        try:
            return urllib2.urlopen("https://e-example.com:444/TESTcron.php?k="+cron_cipher+"&m="+minute+"&f=rules")
        except Exception as e2:
            urllib2.urlopen("https://example.com/cron/error.php?url="+url+"&code="+str(e2.code))
            print("Lookup error: https://example.com/cron/error.php?url="+url+"&code="+str(e2.code));
            return None
        return None

def lambda_handler(event, context):
    # code continues below....

我对python非常陌生,但代码正在使用此处显示的my_urlopen函数,但添加customer_list函数似乎会导致问题,尽管我看不到语法问题。

第28行是except Exception as e2:函数中的customer_list行。

它似乎缩进了正确的数量,我认为不需要分号(尽管我已经尝试过和不使用分号)。我错过了什么?

1 个答案:

答案 0 :(得分:2)

您粘贴到问题中的代码混合了用于缩进的空格和制表符。 在Python中,这是一个禁忌。您必须使用所有空格或所有选项卡进行缩进。 PEP8风格指南说spaces are the preferred indentation method

请务必使用具有"空白模式"的文本编辑器。它允许您查看空格和制表符之间的区别。 例如,emacs的T表示标签为黄色,空格为居中点。

enter image description here

如果您使用的是unix,则另一种检测标签与空格的方法是运行 M-x whitespace-mode

cat -A <filename>

此处,标签由% cat -A lambda_function.py def customer_list(cron_cipher, minute):$ ^Itry:$ ^I^Ireturn urllib2.urlopen("https://d-example.com:444/TESTcron.php?k="+cron_cipher+"&m="+minute+"&f=rules")$ ^Iexcept Exception as e:$ ^I^Itry:$ ^I^I^Ireturn urllib2.urlopen("https://e-example.com:444/TESTcron.php?k="+cron_cipher+"&m="+minute+"&f=rules")$ except Exception as e2:$ urllib2.urlopen("https://example.com/cron/error.php?url="+url+"&code="+str(e2.code))$ ^I^I print("Lookup error: https://example.com/cron/error.php?url="+url+"&code="+str(e2.code));$ return None$ return None$ $ def lambda_handler(event, context):$ ^I # code continues below....$ 描述。

将标签替换为4个空格以修复语法错误。