astro py:docs

- Index
- Modules

### Navigation

- next »
- « previous |
- Astropy v5.2.1 »
- VOTable XML Handling (`astropy.io.votable`) »
- `astropy.io.votable.exceptions`

# `astropy.io.votable.exceptions`

## Warnings

Note

Most of the following warnings indicate violations of the VOTable specification. They should be reported to the authors of the tools that produced the VOTable file.

To control the warnings emitted, use the standard Python `warnings` module and the `astropy.io.votable.exceptions.conf.max_warnings` configuration item. Most of these are of the type `VOTableSpecWarning`.

### W01: Array uses commas rather than whitespace

The VOTable spec states:

> If a cell contains an array or complex number, it should be encoded as multiple numbers separated by whitespace.

Many VOTable files in the wild use commas as a separator instead, and `astropy.io.votable` can support this convention depending on the Verifying VOTables setting.

`astropy.io.votable` always outputs files using only spaces, regardless of how they were input.

References: 1.1, 1.2

### W02: x attribute ‘y’ is invalid. Must be a standard XML id

XML ids must match the following regular expression:

    ^[A-Za-z_][A-Za-z0-9_\.\-]*$

The VOTable 1.1 says the following:

> According to the XML standard, the attribute `ID` is a string beginning with a letter or underscore (`_`), followed by a sequence of letters, digits, or any of the punctuation characters `.` (dot), `-` (dash), `_` (underscore), or `:` (colon).

However, this is in conflict with the XML standard, which says colons may not be used. VOTable 1.1’s own schema does not allow a colon here. Therefore, `astropy.io.votable` disallows the colon.

VOTable 1.2 corrects this error in the specification.

References: 1.1, XML Names

### W03: Implicitly generating an ID from a name ‘x’ -> ‘y’

The VOTable 1.1 spec says the following about `name` vs. `ID` on `FIELD` and `VALUE` elements:

> `ID` and `name` attributes have a different role in VOTable: the `ID` is meant as a unique identifier of an element seen as a VOTable component, while the `name` is meant for presentation purposes, and need not to be unique throughout the VOTable document. The `ID` attribute is therefore required in the elements which have to be referenced, but in principle any element may have an `ID` attribute. … In summary, the `ID` is different from the `name` attribute in that (a) the `ID` attribute is made from a restricted character set, and must be unique throughout a VOTable document whereas names are standard XML attributes and need not be unique; and (b) there should be support in the parsing software to look up references and extract the relevant element with matching `ID`.

It is further recommended in the VOTable 1.2 spec:

> While the `ID` attribute has to be unique in a VOTable document, the `name` attribute need not. It is however recommended, as a good practice, to assign unique names within a `TABLE` element. This recommendation means that, between a `TABLE` and its corresponding closing `TABLE` tag, `name` attributes of `FIELD`, `PARAM` and optional `GROUP` elements should be all different.

Since `astropy.io.votable` requires a unique identifier for each of its columns, `ID` is used for the column name when present. However, when `ID` is not present, (since it is not required by the specification) `name` is used instead. However, `name` must be cleansed by replacing invalid characters (such as whitespace) with underscores.

Note

This warning does not indicate that the input file is invalid with respect to the VOTable specification, only that the column names in the record array may not match exactly the `name` attributes specified in the file.

References: 1.1, 1.2

### W04: content-type ‘x’ must be a valid MIME content type

The `content-type` attribute must use MIME content-type syntax as defined in RFC 2046.

The current check for validity is somewhat over-permissive.

References: 1.1, 1.2

### W05: ‘x’ is not a valid URI

The attribute must be a valid URI as defined in RFC 2396.

### W06: Invalid UCD ‘x’: explanation

This warning is emitted when a `ucd` attribute does not match the syntax of a unified content descriptor.

If the VOTable version is 1.2 or later, the UCD will also be checked to ensure it conforms to the controlled vocabulary defined by UCD1+.

References: 1.1, 1.2

### W07: Invalid astroYear in x: ‘y’

As astro year field is a Besselian or Julian year matching the regular expression:

    ^[JB]?[0-9]+([.][0-9]*)?$

Defined in this XML Schema snippet:

    <xs:simpleType  name="astroYear">
      <xs:restriction base="xs:token">
        <xs:pattern  value="[JB]?[0-9]+([.][0-9]*)?"/>
      </xs:restriction>
    </xs:simpleType>

### W08: ‘x’ must be a str or bytes object

To avoid local-dependent number parsing differences, `astropy.io.votable` may require a string or unicode string where a numeric type may make more sense.

### W09: ID attribute not capitalized

The VOTable specification uses the attribute name `ID` (with uppercase letters) to specify unique identifiers. Some VOTable-producing tools use the more standard lowercase `id` instead. `astropy.io.votable` accepts `id` and emits this warning if `verify` is `'warn'`.

References: 1.1, 1.2

### W10: Unknown tag ‘x’. Ignoring

The parser has encountered an element that does not exist in the specification, or appears in an invalid context. Check the file against the VOTable schema (with a tool such as xmllint. If the file validates against the schema, and you still receive this warning, this may indicate a bug in `astropy.io.votable`.

References: 1.1, 1.2

### W11: The gref attribute on LINK is deprecated in VOTable 1.1

Earlier versions of the VOTable specification used a `gref` attribute on the `LINK` element to specify a GLU reference. New files should specify a `glu:` protocol using the `href` attribute.

Since `astropy.io.votable` does not currently support GLU references, it likewise does not automatically convert the `gref` attribute to the new form.

References: 1.1, 1.2

### W12: ‘x’ element must have at least one of ‘ID’ or ‘name’ attributes

In order to name the columns of the Numpy record array, each `FIELD` element must have either an `ID` or `name` attribute to derive a name from. Strictly speaking, according to the VOTable schema, the `name` attribute is required. However, if `name` is not present by `ID` is, and `verify` is not `'exception'`, `astropy.io.votable` will continue without a `name` defined.

References: 1.1, 1.2

### W13: ‘x’ is not a valid VOTable datatype, should be ‘y’

Some VOTable files in the wild use non-standard datatype names. These are mapped to standard ones using the following mapping:

    string        -> char
    unicodeString -> unicodeChar
    int16         -> short
    int32         -> int
    int64         -> long
    float32       -> float
    float64       -> double
    unsignedInt   -> long
    unsignedShort -> int

To add more datatype mappings during parsing, use the `datatype_mapping` keyword to `astropy.io.votable.parse`.

References: 1.1, 1.2

### W15: x element missing required ‘name’ attribute

The `name` attribute is required on every `FIELD` element. However, many VOTable files in the wild omit it and provide only an `ID` instead. In this case, when `verify` is not `'exception'` `astropy.io.votable` will copy the `name` attribute to a new `ID` attribute.

References: 1.1, 1.2

### W17: x element contains more than one DESCRIPTION element

A `DESCRIPTION` element can only appear once within its parent element.

According to the schema, it may only occur once (1.1, 1.2)

However, it is a proposed extension to VOTable 1.2.

### W18: TABLE specified nrows=x, but table contains y rows

The number of rows explicitly specified in the `nrows` attribute does not match the actual number of rows (`TR` elements) present in the `TABLE`. This may indicate truncation of the file, or an internal error in the tool that produced it. If `verify` is not `'exception'`, parsing will proceed, with the loss of some performance.

References: 1.1, 1.2

### W19: The fields defined in the VOTable do not match those in the embedded FITS file

The column fields as defined using `FIELD` elements do not match those in the headers of the embedded FITS file. If `verify` is not `'exception'`, the embedded FITS file will take precedence.

### W20: No version number specified in file. Assuming 1.1

If no version number is explicitly given in the VOTable file, the parser assumes it is written to the VOTable 1.1 specification.

### W21: astropy.io.votable is designed for VOTable version 1.1, 1.2, 1.3, and 1.4, but this file is x

Unknown issues may arise using `astropy.io.votable` with VOTable files from a version other than 1.1, 1.2, 1.3, or 1.4.

### W22: The DEFINITIONS element is deprecated in VOTable 1.1. Ignoring

Version 1.0 of the VOTable specification used the `DEFINITIONS` element to define coordinate systems. Version 1.1 now uses `COOSYS` elements throughout the document.

References: 1.1, 1.2

### W23: Unable to update service information for ‘x’

Raised when the VO service database can not be updated (possibly due to a network outage). This is only a warning, since an older and possible out-of-date VO service database was available locally.

### W24: The VO catalog database is for a later version of astropy.io.votable

The VO catalog database retrieved from the www is designed for a newer version of `astropy.io.votable`. This may cause problems or limited features performing service queries. Consider upgrading `astropy.io.votable` to the latest version.

### W25: ‘service’ failed with: …

A VO service query failed due to a network error or malformed arguments. Another alternative service may be attempted. If all services fail, an exception will be raised.

### W26: ‘child’ inside ‘parent’ added in VOTable X.X

The given element was not supported inside of the given element until the specified VOTable version, however the version declared in the file is for an earlier version. These attributes may not be written out to the file.

### W27: COOSYS deprecated in VOTable 1.2

The `COOSYS` element was deprecated in VOTABLE version 1.2 in favor of a reference to the Space-Time Coordinate (STC) data model (see utype and the IVOA note referencing STC in VOTable.

### W28: ‘attribute’ on ‘element’ added in VOTable X.X

The given attribute was not supported on the given element until the specified VOTable version, however the version declared in the file is for an earlier version. These attributes may not be written out to the file.

### W29: Version specified in non-standard form ‘v1.0’

Some VOTable files specify their version number in the form “v1.0”, when the only supported forms in the spec are “1.0”.

References: 1.1, 1.2

### W30: Invalid literal for float ‘x’. Treating as empty.

Some VOTable files write missing floating-point values in non-standard ways, such as “null” and “-”. If `verify` is not `'exception'`, any non-standard floating-point literals are treated as missing values.

References: 1.1, 1.2

### W31: NaN given in an integral field without a specified null value

Since NaN’s can not be represented in integer fields directly, a null value must be specified in the FIELD descriptor to support reading NaN’s from the tabledata.

References: 1.1, 1.2

### W32: Duplicate ID ‘x’ renamed to ‘x_2’ to ensure uniqueness

Each field in a table must have a unique ID. If two or more fields have the same ID, some will be renamed to ensure that all IDs are unique.

From the VOTable 1.2 spec:

> The `ID` and `ref` attributes are defined as XML types `ID` and `IDREF` respectively. This means that the contents of `ID` is an identifier which must be unique throughout a VOTable document, and that the contents of the `ref` attribute represents a reference to an identifier which must exist in the VOTable document.

References: 1.1, 1.2

### W33: Column name ‘x’ renamed to ‘x_2’ to ensure uniqueness

Each field in a table must have a unique name. If two or more fields have the same name, some will be renamed to ensure that all names are unique.

References: 1.1, 1.2

### W34: ‘x’ is an invalid token for attribute ‘y’

The attribute requires the value to be a valid XML token, as defined by XML 1.0.

### W35: ‘x’ attribute required for INFO elements

The `name` and `value` attributes are required on all `INFO` elements.

References: 1.1, 1.2

### W36: null value ‘x’ does not match field datatype, setting to 0

If the field specifies a `null` value, that value must conform to the given `datatype`.

References: 1.1, 1.2

### W37: Unsupported data format ‘x’

The 3 datatypes defined in the VOTable specification and supported by `astropy.io.votable` are `TABLEDATA`, `BINARY` and `FITS`.

References: 1.1, 1.2

### W38: Inline binary data must be base64 encoded, got ‘x’

The only encoding for local binary data supported by the VOTable specification is base64.

### W39: Bit values can not be masked

Bit values do not support masking. This warning is raised upon setting masked data in a bit column.

References: 1.1, 1.2

### W40: ‘cprojection’ datatype repaired

This is a terrible hack to support Simple Image Access Protocol results from NOIRLab Astro Data Archive. It creates a field for the coordinate projection type of type “double”, which actually contains character data. We have to hack the field to store character data, or we can’t read it in. A warning will be raised when this happens.

### W41: An XML namespace is specified, but is incorrect. Expected ‘x’, got ‘y’

An XML namespace was specified on the `VOTABLE` element, but the namespace does not match what is expected for a `VOTABLE` file.

The `VOTABLE` namespace is:

    http://www.ivoa.net/xml/VOTable/vX.X

where “X.X” is the version number.

Some files in the wild set the namespace to the location of the VOTable schema, which is not correct and will not pass some validating parsers.

### W42: No XML namespace specified

The root element should specify a namespace.

The `VOTABLE` namespace is:

    http://www.ivoa.net/xml/VOTable/vX.X

where “X.X” is the version number.

### W43: element ref=’x’ which has not already been defined

Referenced elements should be defined before referees. From the VOTable 1.2 spec:

> In VOTable1.2, it is further recommended to place the ID attribute prior to referencing it whenever possible.

### W44: VALUES element with ref attribute has content (‘element’)

`VALUES` elements that reference another element should not have their own content.

From the VOTable 1.2 spec:

> The `ref` attribute of a `VALUES` element can be used to avoid a repetition of the domain definition, by referring to a previously defined `VALUES` element having the referenced `ID` attribute. When specified, the `ref` attribute defines completely the domain without any other element or attribute, as e.g. `<VALUES ref="RAdomain"/>`

### W45: content-role attribute ‘x’ invalid

The `content-role` attribute on the `LINK` element must be one of the following:

    query, hints, doc, location

And in VOTable 1.3, additionally:

    type

References: 1.1, 1.2 1.3

### W46: char or unicode value is too long for specified length of x

The given char or unicode string is too long for the specified field length.

### W47: Missing arraysize indicates length 1

If no arraysize is specified on a char field, the default of ‘1’ is implied, but this is rarely what is intended.

### W48: Unknown attribute ‘attribute’ on element

The attribute is not defined in the specification.

### W49: Empty cell illegal for integer fields.

Prior to VOTable 1.3, the empty cell was illegal for integer fields.

If a “null” value was specified for the cell, it will be used for the value, otherwise, 0 will be used.

### W50: Invalid unit string ‘x’

Invalid unit string as defined in the Units in the VO, Version 1.0 (VOTable version >= 1.4) or Standards for Astronomical Catalogues, Version 2.0 (version < 1.4).

Consider passing an explicit `unit_format` parameter if the units in this file conform to another specification.

### W51: Value ‘x’ is out of range for a n-bit integer field

The integer value is out of range for the size of the field.

### W52: The BINARY2 format was introduced in VOTable 1.3, but this file is declared as version ‘1.2’

The BINARY2 format was introduced in VOTable 1.3. It should not be present in files marked as an earlier version.

### W53: VOTABLE element must contain at least one RESOURCE element.

The VOTABLE element must contain at least one RESOURCE element.

### W54: The TIMESYS element was introduced in VOTable 1.4, but this file is declared as version ‘1.3’

The TIMESYS element was introduced in VOTable 1.4. It should not be present in files marked as an earlier version.

### W55: FIELD () has datatype=”char” but contains non-ASCII value ()

When non-ASCII characters are detected when reading a TABLEDATA value for a FIELD with `datatype="char"`, we can issue this warning.

## Exceptions

Note

This is a list of many of the fatal exceptions emitted by `astropy.io.votable` when the file does not conform to spec. Other exceptions may be raised due to unforeseen cases or bugs in `astropy.io.votable` itself.

### E01: Invalid size specifier ‘x’ for a char/unicode field (in field ‘y’)

The size specifier for a `char` or `unicode` field must be only a number followed, optionally, by an asterisk. Multi-dimensional size specifiers are not supported for these datatypes.

Strings, which are defined as a set of characters, can be represented in VOTable as a fixed- or variable-length array of characters:

    <FIELD name="unboundedString" datatype="char" arraysize="*"/>

A 1D array of strings can be represented as a 2D array of characters, but given the logic above, it is possible to define a variable-length array of fixed-length strings, but not a fixed-length array of variable-length strings.

### E02: Incorrect number of elements in array. Expected multiple of x, got y

The number of array elements in the data does not match that specified in the FIELD specifier.

### E03: ‘x’ does not parse as a complex number

Complex numbers should be two values separated by whitespace.

References: 1.1, 1.2

### E04: Invalid bit value ‘x’

A `bit` array should be a string of ‘0’s and ‘1’s.

References: 1.1, 1.2

### E05: Invalid boolean value ‘x’

A `boolean` value should be one of the following strings (case insensitive) in the `TABLEDATA` format:

    'TRUE', 'FALSE', '1', '0', 'T', 'F', '\0', ' ', '?'

and in `BINARY` format:

    'T', 'F', '1', '0', '\0', ' ', '?'

References: 1.1, 1.2

### E06: Unknown datatype ‘x’ on field ‘y’

The supported datatypes are:

    double, float, bit, boolean, unsignedByte, short, int, long,
    floatComplex, doubleComplex, char, unicodeChar

The following non-standard aliases are also supported, but in these case W13 will be raised:

    string        -> char
    unicodeString -> unicodeChar
    int16         -> short
    int32         -> int
    int64         -> long
    float32       -> float
    float64       -> double
    unsignedInt   -> long
    unsignedShort -> int

To add more datatype mappings during parsing, use the `datatype_mapping` keyword to `astropy.io.votable.parse`.

References: 1.1, 1.2

### E08: type must be ‘legal’ or ‘actual’, but is ‘x’

The `type` attribute on the `VALUES` element must be either `legal` or `actual`.

References: 1.1, 1.2

### E09: ‘x’ must have a value attribute

The `MIN`, `MAX` and `OPTION` elements must always have a `value` attribute.

References: 1.1, 1.2

### E10: ‘datatype’ attribute required on all ‘FIELD’ elements

From VOTable 1.1 and later, `FIELD` and `PARAM` elements must have a `datatype` field.

References: 1.1, 1.2

### E11: precision ‘x’ is invalid

The precision attribute is meant to express the number of significant digits, either as a number of decimal places (e.g. `precision="F2"` or equivalently `precision="2"` to express 2 significant figures after the decimal point), or as a number of significant figures (e.g. `precision="E5"` indicates a relative precision of 10-5).

It is validated using the following regular expression:

    [EF]?[1-9][0-9]*

References: 1.1, 1.2

### E12: width must be a positive integer, got ‘x’

The width attribute is meant to indicate to the application the number of characters to be used for input or output of the quantity.

References: 1.1, 1.2

### E13: Invalid arraysize attribute ‘x’

From the VOTable 1.2 spec:

> A table cell can contain an array of a given primitive type, with a fixed or variable number of elements; the array may even be multidimensional. For instance, the position of a point in a 3D space can be defined by the following:

>     <FIELD ID="point_3D" datatype="double" arraysize="3"/>

> and each cell corresponding to that definition must contain exactly 3 numbers. An asterisk (*) may be appended to indicate a variable number of elements in the array, as in:

>     <FIELD ID="values" datatype="int" arraysize="100*"/>

> where it is specified that each cell corresponding to that definition contains 0 to 100 integer numbers. The number may be omitted to specify an unbounded array (in practice up to =~2×10⁹ elements).

> A table cell can also contain a multidimensional array of a given primitive type. This is specified by a sequence of dimensions separated by the `x` character, with the first dimension changing fastest; as in the case of a simple array, the last dimension may be variable in length. As an example, the following definition declares a table cell which may contain a set of up to 10 images, each of 64×64 bytes:

>     <FIELD ID="thumbs" datatype="unsignedByte" arraysize="64×64×10*"/>

References: 1.1, 1.2

### E14: value attribute is required for all PARAM elements

All `PARAM` elements must have a `value` attribute.

References: 1.1, 1.2

### E15: ID attribute is required for all COOSYS elements

All `COOSYS` elements must have an `ID` attribute.

Note that the VOTable 1.1 specification says this attribute is optional, but its corresponding schema indicates it is required.

In VOTable 1.2, the `COOSYS` element is deprecated.

### E16: Invalid system attribute ‘x’

The `system` attribute on the `COOSYS` element must be one of the following:

    'eq_FK4', 'eq_FK5', 'ICRS', 'ecl_FK4', 'ecl_FK5', 'galactic',
    'supergalactic', 'xy', 'barycentric', 'geo_app'

References: 1.1

### E17: extnum must be a positive integer

`extnum` attribute must be a positive integer.

References: 1.1, 1.2

### E18: type must be ‘results’ or ‘meta’, not ‘x’

The `type` attribute of the `RESOURCE` element must be one of “results” or “meta”.

References: 1.1, 1.2

### E19: File does not appear to be a VOTABLE

Raised either when the file doesn’t appear to be XML, or the root element is not VOTABLE.

### E20: Data has more columns than are defined in the header (x)

The table had only x fields defined, but the data itself has more columns than that.

### E21: Data has fewer columns (x) than are defined in the header (y)

The table had x fields defined, but the data itself has only y columns.

### E22: ID attribute is required for all TIMESYS elements

All `TIMESYS` elements must have an `ID` attribute.

### E23: Invalid timeorigin attribute ‘x’

The `timeorigin` attribute on the `TIMESYS` element must be either a floating point literal specifying a valid Julian Date, or, for convenience, the string “MJD-origin” (standing for 2400000.5) or the string “JD-origin” (standing for 0).

References: 1.4

### E24: Attempt to write non-ASCII value () to FIELD () which has datatype=”char”

Non-ASCII unicode values should not be written when the FIELD `datatype="char"`, and cannot be written in BINARY or BINARY2 serialization.

### E25: No FIELDs are defined; DATA section will be ignored.

A VOTable cannot have a DATA section without any defined FIELD; DATA will be ignored.

## Exception Utilities

class astropy.io.votable.exceptions.Conf

  Configuration parameters for `astropy.io.votable.exceptions`.

  max_warnings

    Number of times the same type of warning is displayed before being suppressed

astropy.io.votable.exceptions.warn_or_raise(warning_class, exception_class=None, args=(), config=None, pos=None, stacklevel=1)

  Warn or raise an exception, depending on the verify setting.

astropy.io.votable.exceptions.vo_raise(exception_class, args=(), config=None, pos=None)

  Raise an exception, with proper position information if available.

astropy.io.votable.exceptions.vo_reraise(exc, config=None, pos=None, additional='')

  Raise an exception, with proper position information if available.

  Restores the original traceback of the exception, and should only be called within an “except:” block of code.

astropy.io.votable.exceptions.vo_warn(warning_class, args=(), config=None, pos=None, stacklevel=1)

  Warn, with proper position information if available.

astropy.io.votable.exceptions.parse_vowarning(line)

  Parses the vo warning string back into its parts.

class astropy.io.votable.exceptions.VOWarning(args, config=None, pos=None)

  Bases: `AstropyWarning`

  The base class of all VO warnings and exceptions.

  Handles the formatting of the message with a warning or exception code, filename, line and column number.

class astropy.io.votable.exceptions.VOTableChangeWarning(args, config=None, pos=None)

  Bases: `VOWarning`, `SyntaxWarning`

  A change has been made to the input XML file.

class astropy.io.votable.exceptions.VOTableSpecWarning(args, config=None, pos=None)

  Bases: `VOWarning`, `SyntaxWarning`

  The input XML file violates the spec, but there is an obvious workaround.

class astropy.io.votable.exceptions.UnimplementedWarning(args, config=None, pos=None)

  Bases: `VOWarning`, `SyntaxWarning`

  A feature of the VOTABLE spec is not implemented.

class astropy.io.votable.exceptions.IOWarning(args, config=None, pos=None)

  Bases: `VOWarning`, `RuntimeWarning`

  A network or IO error occurred, but was recovered using the cache.

class astropy.io.votable.exceptions.VOTableSpecError(args, config=None, pos=None)

  Bases: `VOWarning`, `ValueError`

  The input XML file violates the spec and there is no good workaround.