JSONDecodeError(“期望值”,s,err.value)来自None我做错了什么?

2024-10-01 17:21:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在开发一个带有请求的python脚本api。 我不确定为什么我会不断出现这个错误:

    ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Checking for Tracking Number
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Traceback (most recent call last):
  File "/Users/christophermuller/Library/Mobile Documents/com~apple~CloudDocs/Black Turtle Clothing V2/BrandCanyonApi/restClient.py", line 179, in <module>
    loop.run_until_complete(task)
  File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.8/lib/python3.8/asyncio/base_events.py", line 616, in run_until_complete
    return future.result()
  File "/Users/christophermuller/Library/Mobile Documents/com~apple~CloudDocs/Black Turtle Clothing V2/BrandCanyonApi/restClient.py", line 117, in func
    tracking_number = client.getTrackingNumber(orders[str(orderNumber)]["brand_canyon"])
  File "/Users/christophermuller/Library/Mobile Documents/com~apple~CloudDocs/Black Turtle Clothing V2/BrandCanyonApi/BrandCanyonApi/client.py", line 41, in getTrackingNumber
    data = response.json()['data']
  File "/Library/Python/3.8/site-packages/requests/models.py", line 900, in json
    return complexjson.loads(self.text, **kwargs)
  File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.8/lib/python3.8/json/__init__.py", line 357, in loads
    return _default_decoder.decode(s)
  File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.8/lib/python3.8/json/decoder.py", line 337, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.8/lib/python3.8/json/decoder.py", line 355, in raw_decode
    raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

我的restClient.py代码是这样的:

 elif orders[str(orderNumber)]['status'] != 'sent':
                            print("Checking for Tracking Number")
                            print("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++")
                            tracking_number = client.getTrackingNumber(orders[str(orderNumber)]["brand_canyon"])
                            if tracking_number == None:
                                print("Tracking Nummer noch nicht verfügbar - Ware wurde nicht versendet.")
                                print("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++")
                            if tracking_number != None: 
                                orders[str(orderNumber)]['status'] = 'sent'
                                tracking_url = "https://www.dhl.de/de/privatkunden/pakete-empfangen/verfolgen.html?lang=de&idc={}".format(tracking_number)
                                fulfillment = shopify.Fulfillment({
                                    'order_id':shopifyOrder.id,
                                    'line_items':shopifyOrder.line_items,
                                    'location_id':location_id
                                    })
                                fulfillment.tracking_company = "DHL"
                                fulfillment.tracking_number = tracking_number
                                tracking_numbers = []
                                tracking_numbers.append(tracking_number)
                                fulfillment.tracking_numbers = tracking_numbers
                                fulfillment.tracking_url = tracking_url
                                tracking_urls = []
                                tracking_urls.append(tracking_url)
                                fulfillment.tracking_urls = tracking_urls
                                fulfillment.notify_customer = True
                                fulfillment.save()

这里有client.py和getTrackingNumber函数

def getTrackingNumber(self, orderId):
    """GET /orders/{orderId}"""
    response = requests.get("{baseUrl}/orders/{orderId}".format(baseUrl = self.baseUrl, orderId = orderId), verify=True, headers = self.headers)
    data = response.json()['data']
    return data['tracking_code']

这里还有json和他应该处理的订单,并检查是否有跟踪号。但不知何故,他直接失败了。 我检查了号码,所有号码都正确,状态也正确

{
"1204": {
    "brand_canyon": 26866,
    "status": "production"
},
"1202": {
    "brand_canyon": 26808,
    "status": "production"
},
"1201": {
    "brand_canyon": 26791,
    "status": "progress"
},
"1200": {
    "brand_canyon": 26772,
    "status": "production"
},
"1199": {
    "brand_canyon": 26762,
    "status": "production"
}

}

如果你能在这里帮助我,我会非常感激,我正在尝试一切,但不知何故它不起作用

非常感谢你

诚恳 克里斯

//编辑

完整代码:

async def func():
            print("-----------------------------------------------")
            print("---- Shopify - BrandCanyon API Connection ----")
            print("-----------------------------------------------")
            location_id = shopify.Location.find()[0].attributes['id']
            if open('orders.json') != None:
                f = open('orders.json')
                orders = json.load(f)
            else:
                orders = {}
            shopifyResponse = {}
            while True:
                #Check for Orders
                
                shopifyOrders = shopify.Order.find()
                for shopifyOrder in shopifyOrders:
                    orderNumber = shopifyOrder.attributes['order_number']
                    if shopifyOrder.financial_status == 'paid' and shopifyOrder.fulfillment_status != 'fulfilled':
                        if not str(orderNumber) in orders:
                            print("--------------")
                            print("--- Order ---")
                            print("--------------")
                            shopifyShippingAddress = shopifyOrder.shipping_address
                            shopifyResponse["customer_first_name"] = shopifyShippingAddress.first_name
                            shopifyResponse["customer_last_name"] = shopifyShippingAddress.last_name
                            shopifyResponse["customer_street_name"] = shopifyShippingAddress.address1
                            shopifyResponse["customer_street_number"] = shopifyShippingAddress.address2
                            shopifyResponse["customer_zip_code"] = shopifyShippingAddress.zip
                            shopifyResponse["customer_city"] = shopifyShippingAddress.city
                            shopifyResponse["customer_country_id"] = client.convertCountryCode(shopifyShippingAddress.country_code)
                            shopifyResponse["customer_email"] = shopifyOrder.contact_email
                            products = []
                            for product in shopifyOrder.line_items:
                                variantId = product.attributes['variant_id']
                                variant = shopify.Variant.find(id_ = variantId)
                                _product = {}
                                _product['product_name'] = product.title
                                _product['product_size'] = variant.attributes['option2']
                                _product['product_quantity'] = product.quantity
                                inventoryItem = shopify.InventoryItem.find(id_ = variant.inventory_item_id)
                                shopify.InventoryLevel.set( 
                                    location_id = location_id, 
                                    inventory_item_id = variant.inventory_item_id, 
                                    available = 3
                                )
                                products.append(_product)
                            shopifyResponse["products"] = products
                            print("{} product(s) were ordered.".format(len(products)))
                            print("----------------------------")    
                            # Parse shopify order in a new brand canyon order
                            order = BrandCanyonApi.parseShopify(shopifyResponse)
                            # Complete Order
                            orderId = client.completeOrder(order)

                            for orderItem in order._order_items: 
                                print(orderItem.json(client))
                            for service in order._services: 
                                print(service.json())




                            if orderId != 0:
                                orders[str(orderNumber)] = {
                                    'brand_canyon': orderId,
                                    'status': 'open'
                                }
                                tracking_id = client.getTrackingNumber(orders[str(orderNumber)]["brand_canyon"])
                            else:
                                # Send email to support email
                                print("ERROR - Email sent")
                                print("------------------------------------------")
                                gmail_user = '#######'
                                gmail_password = '#########'
                                sent_from = gmail_user
                                to = ["######", "#######"]
                                subject = 'BESTELLUNG [{}] Fehler bei Brand Canyon Bestellung'.format(orderNumber)
                                body = 'Es gab einen Fehler bei der Bestellung {}.'.format(orderNumber)
                                email_text = """\
    From: %s
    To: %s
    Subject: %s
    %s
    """ % (sent_from, ", ".join(to), subject, body)
                                server = smtplib.SMTP_SSL('smtp.gmail.com', 465)
                                server.ehlo()
                                server.login(gmail_user, gmail_password)
                                server.sendmail(gmail_user, "######", email_text)
                                server.close()
                        elif orders[str(orderNumber)]['status'] != 'sent':

                            
                            print("----------------------------")
                            print("--- Verify: Tracking-ID ---")
                            print("----------------------------")
                            tracking_id = client.getTrackingNumber(orders[str(orderNumber)]["brand_canyon"])
                            print(orders)
                            if tracking_id == None:
                                print("Tracking-ID not found - Package not shipped yet.")
                                print("------------------------------------------")
                                
                            if tracking_id != None: 
                                orders[str(orderNumber)]['status'] = 'sent'
                                tracking_url = "https://www.dhl.de/de/privatkunden/pakete-empfangen/verfolgen.html?lang=de&idc={}".format(tracking_id)
                                fulfillment = shopify.Fulfillment({
                                    'order_id':shopifyOrder.id,
                                    'line_items':shopifyOrder.line_items,
                                    'location_id':location_id
                                    })
                                fulfillment.tracking_company = "DHL"
                                fulfillment.tracking_id = tracking_id
                                tracking_id = []
                                tracking_id.append(tracking_id)
                                fulfillment.tracking_id = tracking_id
                                fulfillment.tracking_url = tracking_url
                                tracking_urls = []
                                tracking_urls.append(tracking_url)
                                fulfillment.tracking_urls = tracking_urls
                                fulfillment.notify_customer = True
                                fulfillment.save()
                    elif shopifyOrder.financial_status == 'partially_paid' and shopifyOrder.financial_status == 'pending' and shopifyOrder.fulfillment_status != 'fulfilled':
                            print("The Order is not fully paid yet - therefore its not being processed.")
                    elif shopifyOrder.financial_status == 'refunded' and shopifyOrder.financial_status == 'partially_refunded' and shopifyOrder.fulfillment_status != 'fulfilled':
                            print("The Order partially or fully refunded - therefore the order is not being processed.")
                    with open('orders.json', 'w+') as f:
                        json.dump(orders, f, indent=4)
                await asyncio.sleep(15)
                

Tags: inidjsonstatuslinelibraryproducttracking

热门问题