Search code examples
pythonargumentspython-typing

How do I specify multiple types for a parameter using type-hints?


I have a Python function which accepts XML data as an str.

For convenience, the function also checks for xml.etree.ElementTree.Element and will automatically convert to str if necessary.

import xml.etree.ElementTree as ET

def post_xml(data: str):
    if type(data) is ET.Element:
        data = ET.tostring(data).decode()
    # ...

Is it possible to specify with type-hints that a parameter can be given as one of two types?

def post_xml(data: str or ET.Element):
    # ...

Solution

  • You want a type union. For Python 3.10+:

    def post_xml(data: str | ET.Element):
    

    For earlier versions:

    from typing import Union
    
    def post_xml(data: Union[str, ET.Element]):
        ...