POST请求触发TypeError:'PollingException'对象不可迭代,求问题排查
Hey there! Let's break down why you're hitting this error when sending your PollingException object to the API. This issue almost always ties back to how you're passing the object in your POST request—here are the most common causes and fixes:
1. You're passing the raw Python object directly (not a serializable format)
APIs don't understand raw Python objects—they expect structured data like JSON, form data, or XML. When you pass a custom PollingException instance directly to requests.post() (especially with the data parameter), the requests library tries to iterate over the object to encode it. Since your PollingException class doesn't implement iterable behavior, this throws the error.
Wrong approach:
import requests from your_module import PollingException exc = PollingException(message="Connection timed out", code=504) # This triggers the TypeError response = requests.post("https://your-api-url.com/endpoint", data=exc)
2. Your custom object isn't converted to a JSON-friendly structure
You need to turn your PollingException instance into a dictionary (or another JSON-serializable type) before sending it. Here are two simple ways to do this:
Option A: Add a to_dict() method to your class
class PollingException: def __init__(self, message, code): self.message = message self.code = code # Add this method to convert the object to a dictionary def to_dict(self): return { "message": self.message, "code": self.code } # Serialize to JSON when sending exc = PollingException(message="Connection timed out", code=504) response = requests.post( "https://your-api-url.com/endpoint", json=exc.to_dict() # The json parameter auto-serializes the dict )
Option B: Use dataclasses for automatic serialization
If you're on Python 3.7+, dataclasses simplify this process:
from dataclasses import dataclass, asdict @dataclass class PollingException: message: str code: int exc = PollingException(message="Connection timed out", code=504) # Convert the dataclass instance to a dict with asdict() response = requests.post( "https://your-api-url.com/endpoint", json=asdict(exc) )
3. The API expects an iterable (like a list) but you're sending a single object
Double-check your API docs—if it expects a list of PollingException objects instead of one instance, sending just one will make the backend try to iterate over it, causing the error.
Fix: Wrap your serialized object in a list:
response = requests.post( "https://your-api-url.com/endpoint", json=[asdict(exc)] # Send as a list of objects )
Quick Recap
- Never send raw Python objects directly to an API—always serialize them to JSON (or the format your API requires).
- Make sure the structure you send matches what the API expects (single object vs. list).
- Use helper methods or
dataclassesto simplify serialization.
内容的提问来源于stack exchange,提问作者Ratha

