Exceptions
The ptouch library provides a hierarchy of exception classes for targeted error handling.
Exception Hierarchy
All printer-related exceptions inherit from PrinterConnectionError:
PrinterConnectionError (base)
├── PrinterNotFoundError
├── PrinterPermissionError
├── PrinterNetworkError
├── PrinterTimeoutError
└── PrinterWriteError
Exception Classes
- exception PrinterConnectionError
Base exception for all printer connection errors.
Attributes:
original_error- The original exception that caused this error (if any)
Usage:
Catch this exception to handle all connection-related errors:
try: printer.print(label) except PrinterConnectionError as e: print(f"Connection error: {e}") if e.original_error: print(f"Original error: {e.original_error}")
- exception PrinterNotFoundError
Printer device not found or not accessible.
Common causes:
USB printer not connected
Wrong USB product ID
Device unplugged during operation
Solutions:
Check USB connection
Verify printer is powered on
Check product ID matches your model
- exception PrinterPermissionError
Insufficient permissions to access printer (USB only).
Common causes:
Linux USB permissions not configured
Running without necessary privileges
Solutions:
See Installation for USB permissions setup (udev rules, user groups).
- exception PrinterNetworkError
Network-specific connection errors.
Common causes:
Network connectivity issues
Firewall blocking port 9100
Printer disconnected from network
Connection lost during print
Solutions:
Check network connectivity
Verify firewall settings
Test with
telnet <ip> 9100Check WiFi signal strength
- exception PrinterTimeoutError
Connection or operation timeout.
Common causes:
Printer powered off
Wrong IP address
Network latency
Printer busy or jammed
Solutions:
Verify printer is powered on
Check IP address is correct
Increase timeout if needed
Check printer status (paper, cover, etc.)
- exception PrinterWriteError
Failed to write data to printer.
Common causes:
USB cable disconnected
USB communication error
Network connection lost
Incomplete data transfer
Solutions:
Check USB/network connection
Try different USB port or cable
Implement retry logic
Check for transient errors
Usage Examples
Catch All Connection Errors
from ptouch import PrinterConnectionError
try:
printer.print(label)
except PrinterConnectionError as e:
print(f"Failed to print: {e}")
Catch Specific Errors
from ptouch import (
PrinterTimeoutError,
PrinterNetworkError,
PrinterPermissionError,
)
try:
printer.print(label)
except PrinterPermissionError:
print("Permission denied - see installation guide for USB setup")
except PrinterTimeoutError:
print("Printer not responding - check if powered on")
except PrinterNetworkError as e:
print(f"Network error: {e} - check connectivity")
Access Original Error
All exceptions preserve the original error:
try:
printer.print(label)
except PrinterConnectionError as e:
print(f"Error: {e}")
if e.original_error:
print(f"Caused by: {type(e.original_error).__name__}")
print(f"Details: {e.original_error}")
Retry Logic
Implement retry logic for transient failures:
import time
from ptouch import PrinterTimeoutError, PrinterNetworkError
def print_with_retry(printer, label, max_retries=3):
for attempt in range(max_retries):
try:
printer.print(label)
return True
except (PrinterTimeoutError, PrinterNetworkError) as e:
if attempt == max_retries - 1:
raise
print(f"Retry {attempt + 1}/{max_retries}: {e}")
time.sleep(2)
return False
Best Practices
Always catch PrinterConnectionError - Use specific exceptions for known scenarios, fall back to base exception
Log original errors - The
original_errorattribute helps debuggingProvide user feedback - Give actionable error messages:
except PrinterTimeoutError: print("Printer not responding:") print(" 1. Check if printer is powered on") print(" 2. Verify network connection") print(" 3. Check IP address is correct")
Implement retries - Network and USB connections can have transient failures
Check permissions early - Test USB permissions before batch jobs:
from ptouch import ConnectionUSB, PrinterPermissionError try: connection = ConnectionUSB() # Test connection printer = PTE550W(connection) except PrinterPermissionError: print("USB permissions not configured") print("See: https://ptouch.readthedocs.io/en/latest/installation.html") sys.exit(1)
See Also
Troubleshooting - Solutions to common problems
Installation - USB permissions setup
Connection Module - Connection module documentation