<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>语法错误 on On My Way</title>
    <link>https://tuanzi-wow.cn/tags/%E8%AF%AD%E6%B3%95%E9%94%99%E8%AF%AF/</link>
    <description>Recent content in 语法错误 on On My Way</description>
    <generator>Hugo</generator>
    <language>zh-CN</language>
    <lastBuildDate>Fri, 04 Sep 2026 00:00:00 +0800</lastBuildDate>
    <atom:link href="https://tuanzi-wow.cn/tags/%E8%AF%AD%E6%B3%95%E9%94%99%E8%AF%AF/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>8. 错误和异常</title>
      <link>https://tuanzi-wow.cn/python/python-08-errors/</link>
      <pubDate>Fri, 04 Sep 2026 00:00:00 +0800</pubDate>
      <guid>https://tuanzi-wow.cn/python/python-08-errors/</guid>
      <description>语法错误与异常的区别，try/except/else/finally 的处理结构。</description>
      <content:encoded><![CDATA[<h2 id="81语法错误">8.1.语法错误</h2>
<p>又称解析错误
报错信息包括：出错的行；显示指向检测到错误位置的小箭头；文件名</p>
<h2 id="82异常">8.2.异常</h2>
<p>在执行时检测到的错误称为异常
报错信息包括：异常的类型；错误细节</p>
<h2 id="83异常的处理">8.3.异常的处理</h2>
<p>try语句的<strong>工作原理</strong>：
1.执行try子句
2.没有触发异常，跳过except子句
3.触发异常，跳过try子句剩下部分，并且将异常与except后关键字进行匹配“如果匹配，则执行except子句；如果为未匹配，则停止执行并输出一条错误信息</p>
<p><strong>特性：</strong>
一个 <code>try</code> 可以有多个普通 <code>except</code> 子句，对于一次抛出的普通异常，只有第一个匹配的 <code>except</code> 子句会执行。一个 <a href="https://docs.python.org/zh-cn/3/reference/compound_stmts.html#except"><code>except</code></a> 子句中的类匹配的异常将是该类本身的实例或其所派生的类的实例（但反过来则不可以 &mdash; 列出派生类的 <em>except 子句</em> 不会匹配其基类的实例）
人话：基类（父类）异常可以匹配子类异常，反之不可以
so，需要主要异常匹配的顺序
<strong>异常参数</strong>
except子句可能在异常后指定一个变量（通过as），被绑定到异常实例，该实例有一个args属性，内置异常类型定义了 <a href="https://docs.python.org/zh-cn/3/reference/datamodel.html#object.__str__"><code>__str__()</code></a> 来打印所有参数而不必显式地访问 <code>.args</code>。</p>
<p><strong>异常之间的关系</strong>
<a href="https://docs.python.org/zh-cn/3/library/exceptions.html#BaseException"><code>BaseException</code></a> 是所有异常的共同基类。它的一个子类，<a href="https://docs.python.org/zh-cn/3/library/exceptions.html#Exception"><code>Exception</code></a>，是所有非致命异常的基类。不是 <code>Exception</code> 的子类的异常通常不被处理，因为它们被用来指示程序应该终止。它们包括由 <a href="https://docs.python.org/zh-cn/3/library/sys.html#sys.exit"><code>sys.exit()</code></a> 引发的 <a href="https://docs.python.org/zh-cn/3/library/exceptions.html#SystemExit"><code>SystemExit</code></a>，以及当用户希望中断程序时引发的 <a href="https://docs.python.org/zh-cn/3/library/exceptions.html#KeyboardInterrupt"><code>KeyboardInterrupt</code></a>。</p>
<p>异常匹配的注意点：
<a href="https://docs.python.org/zh-cn/3/library/exceptions.html#Exception"><code>Exception</code></a> 可以被用作通配符，捕获（几乎）一切。然而，<strong>好的做法是，尽可能具体地说明我们打算处理的异常类型，并允许任何意外的异常传播下去。</strong></p>
<p>try&hellip;except语句具有可选的else语句</p>
<p>异常处理程序还会处理在try子句中调用的函数的异常</p>
<h3 id="84触发异常">8.4.触发异常</h3>
<p>使用raise语句，强制触发指定类型的异常
唯一的参数是要触发的异常，这个参数必须是异常实例或者异常类，如果是异常类，会隐式调用无参数的构造函数来创建一个异常实例</p>
<h3 id="85异常链">8.5.异常链</h3>
<p>raise  a from b语句来显式表明一个异常（a）是另一个异常（b）的直接后果：此处的b必须为实例或者none，而未none时，表示禁用自动异常链</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span><span class="lnt">20
</span><span class="lnt">21
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">def func():
</span></span><span class="line"><span class="cl">    raise ConnectionError
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">try:
</span></span><span class="line"><span class="cl">    func()
</span></span><span class="line"><span class="cl">except ConnectionError as exc:
</span></span><span class="line"><span class="cl">    raise RuntimeError(&#39;Failed to open database&#39;) from exc
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Traceback (most recent call last):
</span></span><span class="line"><span class="cl">  File &#34;&lt;stdin&gt;&#34;, line 2, in &lt;module&gt;
</span></span><span class="line"><span class="cl">    func()
</span></span><span class="line"><span class="cl">    ~~~~^^
</span></span><span class="line"><span class="cl">  File &#34;&lt;stdin&gt;&#34;, line 2, in func
</span></span><span class="line"><span class="cl">ConnectionError
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">The above exception was the direct cause of the following exception:
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Traceback (most recent call last):
</span></span><span class="line"><span class="cl">  File &#34;&lt;stdin&gt;&#34;, line 4, in &lt;module&gt;
</span></span><span class="line"><span class="cl">    raise RuntimeError(&#39;Failed to open database&#39;) from exc
</span></span><span class="line"><span class="cl">RuntimeError: Failed to open database
</span></span></code></pre></td></tr></table>
</div>
</div><h3 id="86用户自定义异常">8.6.用户自定义异常</h3>
<p>程序可以通过创建新的异常类命名自己的异常 (Python 类的内容详见 <a href="https://docs.python.org/zh-cn/3/tutorial/classes.html#tut-classes">类</a>)。 不论是以直接还是间接的方式，异常都应从 <a href="https://docs.python.org/zh-cn/3/library/exceptions.html#Exception"><code>Exception</code></a> 类派生。</p>
<p>异常类可以被定义成能做其他类所能做的任何事，但通常应当保持简单，它往往只提供一些属性，允许相应的异常处理程序提取有关错误的信息。</p>
<p>大多数异常命名都以&quot;Error&quot;结尾，类似标准异常的命名。</p>
<p>许多标准模块定义了自己的异常，以报告他们定义的函数中可能出现的错误。</p>
<h3 id="87定义清理操作">8.7.定义清理操作</h3>
<p>try-finally语句：定义在所有情况下都要执行的操作，通常在异常处理中用于清理操作
一些复杂的触发异常场景，感觉没什么意思，自己看看吧</p>
<ul>
<li>如果执行 <code>try</code> 子句期间触发了某个异常，则某个 <a href="https://docs.python.org/zh-cn/3/reference/compound_stmts.html#except"><code>except</code></a> 子句应处理该异常。如果该异常没有 <code>except</code> 子句处理，在 <code>finally</code> 子句执行后会被重新触发。</li>
<li><code>except</code> 或 <code>else</code> 子句执行期间也会触发异常。同样，该异常会在 <code>finally</code> 子句执行之后被重新触发。</li>
<li>如果 <code>finally</code> 子句执行 <a href="https://docs.python.org/zh-cn/3/reference/simple_stmts.html#break"><code>break</code></a>、 <a href="https://docs.python.org/zh-cn/3/reference/simple_stmts.html#continue"><code>continue</code></a> 或 <a href="https://docs.python.org/zh-cn/3/reference/simple_stmts.html#return"><code>return</code></a> 语句，异常不重新引发。这可能会引起混淆，因此不鼓励使用。从 3.14 版开始，编译器会为它发出一个 <a href="https://docs.python.org/zh-cn/3/library/exceptions.html#SyntaxWarning"><code>SyntaxWarning</code></a> (参见 <a href="https://peps.python.org/pep-0765/"><strong>PEP 765</strong></a>)。</li>
<li>如果执行 <code>try</code> 语句时遇到 <a href="https://docs.python.org/zh-cn/3/reference/simple_stmts.html#break"><code>break</code></a>、<a href="https://docs.python.org/zh-cn/3/reference/simple_stmts.html#continue"><code>continue</code></a> 或 <a href="https://docs.python.org/zh-cn/3/reference/simple_stmts.html#return"><code>return</code></a> 语句，则 <code>finally</code> 子句在执行 <code>break</code>、<code>continue</code> 或 <code>return</code> 语句之前执行。</li>
<li>如果一个 <code>finally</code> 子句包含一个 <code>return</code> 语句，返回的值将是来自 <code>finally</code> 子句的 <code>return</code> 语句，而不是来自 <code>try</code> 子句的 <code>return</code> 语句。 这可能会引起混淆，因此不提倡使用。 从 3.14 版开始，编译器会为它发出一个 <a href="https://docs.python.org/zh-cn/3/library/exceptions.html#SyntaxWarning"><code>SyntaxWarning</code></a> (参见 <a href="https://peps.python.org/pep-0765/"><strong>PEP 765</strong></a>)。</li>
</ul>
<p>通常用于释放外部资源的逻辑</p>
<h3 id="88预定义的清理操作没啥意思自己看">8.8.预定义的清理操作（没啥意思，自己看）</h3>
<p>某些对象定义了不需要该对象时要执行的标准清理操作。无论使用该对象的操作是否成功，都会执行清理操作。比如，下例要打开一个文件，并输出文件内容：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">for line in open(&#34;myfile.txt&#34;):
</span></span><span class="line"><span class="cl">    print(line, end=&#34;&#34;)
</span></span></code></pre></td></tr></table>
</div>
</div><p>这个代码的问题在于，执行完代码后，文件在一段不确定的时间内处于打开状态。在简单脚本中这没有问题，但对于较大的应用程序来说可能会出问题。<a href="https://docs.python.org/zh-cn/3/reference/compound_stmts.html#with"><code>with</code></a> 语句支持以及时、正确的清理的方式使用文件对象：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">with open(&#34;myfile.txt&#34;) as f:
</span></span><span class="line"><span class="cl">    for line in f:
</span></span><span class="line"><span class="cl">        print(line, end=&#34;&#34;)
</span></span></code></pre></td></tr></table>
</div>
</div><p>语句执行完毕后，即使在处理行时遇到问题，都会关闭文件 <em>f</em>。和文件一样，支持预定义清理操作的对象会在文档中指出这一点。</p>
<h3 id="89引发和处理多个不相关的异常">8.9.引发和处理多个不相关的异常</h3>
<p>场景：继续执行收集多个错误而不是引发第一个异常
方法一：内置的 <a href="https://docs.python.org/zh-cn/3/library/exceptions.html#ExceptionGroup"><code>ExceptionGroup</code></a> 打包了一个异常实例的列表，这样它们就可以一起被引发。它本身就是一个异常，所以它可以像其他异常一样被捕获。
方法二：使用except<em>替代except，有选择地处理异常，注意此处地except</em>子句就不再是只能执行一个了</p>
<p>例子：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span><span class="lnt">20
</span><span class="lnt">21
</span><span class="lnt">22
</span><span class="lnt">23
</span><span class="lnt">24
</span><span class="lnt">25
</span><span class="lnt">26
</span><span class="lnt">27
</span><span class="lnt">28
</span><span class="lnt">29
</span><span class="lnt">30
</span><span class="lnt">31
</span><span class="lnt">32
</span><span class="lnt">33
</span><span class="lnt">34
</span><span class="lnt">35
</span><span class="lnt">36
</span><span class="lnt">37
</span><span class="lnt">38
</span><span class="lnt">39
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">def f():
</span></span><span class="line"><span class="cl">    raise ExceptionGroup(
</span></span><span class="line"><span class="cl">        &#34;group1&#34;,
</span></span><span class="line"><span class="cl">        [
</span></span><span class="line"><span class="cl">            OSError(1),
</span></span><span class="line"><span class="cl">            SystemError(2),
</span></span><span class="line"><span class="cl">            ExceptionGroup(
</span></span><span class="line"><span class="cl">                &#34;group2&#34;,
</span></span><span class="line"><span class="cl">                [
</span></span><span class="line"><span class="cl">                    OSError(3),
</span></span><span class="line"><span class="cl">                    RecursionError(4)
</span></span><span class="line"><span class="cl">                ]
</span></span><span class="line"><span class="cl">            )
</span></span><span class="line"><span class="cl">        ]
</span></span><span class="line"><span class="cl">    )
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">try:
</span></span><span class="line"><span class="cl">    f()
</span></span><span class="line"><span class="cl">except* OSError as e:
</span></span><span class="line"><span class="cl">    print(&#34;There were OSErrors&#34;)
</span></span><span class="line"><span class="cl">except* SystemError as e:
</span></span><span class="line"><span class="cl">    print(&#34;There were SystemErrors&#34;)
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">There were OSErrors
</span></span><span class="line"><span class="cl">There were SystemErrors
</span></span><span class="line"><span class="cl">  + Exception Group Traceback (most recent call last):
</span></span><span class="line"><span class="cl">  |   File &#34;&lt;stdin&gt;&#34;, line 2, in &lt;module&gt;
</span></span><span class="line"><span class="cl">  |     f()
</span></span><span class="line"><span class="cl">  |     ~^^
</span></span><span class="line"><span class="cl">  |   File &#34;&lt;stdin&gt;&#34;, line 2, in f
</span></span><span class="line"><span class="cl">  |     raise ExceptionGroup(
</span></span><span class="line"><span class="cl">  |     ...&lt;12 lines&gt;...
</span></span><span class="line"><span class="cl">  |     )
</span></span><span class="line"><span class="cl">  | ExceptionGroup: group1 (1 sub-exception)
</span></span><span class="line"><span class="cl">  +-+---------------- 1 ----------------
</span></span><span class="line"><span class="cl">    | ExceptionGroup: group2 (1 sub-exception)
</span></span><span class="line"><span class="cl">    +-+---------------- 1 ----------------
</span></span><span class="line"><span class="cl">      | RecursionError: 4
</span></span><span class="line"><span class="cl">      +------------------------------------
</span></span></code></pre></td></tr></table>
</div>
</div><p>注意，嵌套在一个异常组中的异常必须是实例，而不是类型。这是因为在实践中，这些异常通常是那些已经被程序提出并捕获的异常</p>
<h3 id="810用注释细化异常情况">8.10.用注释细化异常情况</h3>
<p>add_note(note)用于在异常被捕获之后添加信息到异常地注释列表中
例如：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">try:
</span></span><span class="line"><span class="cl">    raise TypeError(&#39;bad type&#39;)
</span></span><span class="line"><span class="cl">except Exception as e:
</span></span><span class="line"><span class="cl">    e.add_note(&#39;Add some information&#39;)
</span></span><span class="line"><span class="cl">    e.add_note(&#39;Add some more information&#39;)
</span></span><span class="line"><span class="cl">    raise
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Traceback (most recent call last):
</span></span><span class="line"><span class="cl">  File &#34;&lt;stdin&gt;&#34;, line 2, in &lt;module&gt;
</span></span><span class="line"><span class="cl">    raise TypeError(&#39;bad type&#39;)
</span></span><span class="line"><span class="cl">TypeError: bad type
</span></span><span class="line"><span class="cl">Add some information
</span></span><span class="line"><span class="cl">Add some more information
</span></span></code></pre></td></tr></table>
</div>
</div><p>应用于异常组中，例如：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span><span class="lnt">20
</span><span class="lnt">21
</span><span class="lnt">22
</span><span class="lnt">23
</span><span class="lnt">24
</span><span class="lnt">25
</span><span class="lnt">26
</span><span class="lnt">27
</span><span class="lnt">28
</span><span class="lnt">29
</span><span class="lnt">30
</span><span class="lnt">31
</span><span class="lnt">32
</span><span class="lnt">33
</span><span class="lnt">34
</span><span class="lnt">35
</span><span class="lnt">36
</span><span class="lnt">37
</span><span class="lnt">38
</span><span class="lnt">39
</span><span class="lnt">40
</span><span class="lnt">41
</span><span class="lnt">42
</span><span class="lnt">43
</span><span class="lnt">44
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">def f():
</span></span><span class="line"><span class="cl">    raise OSError(&#39;operation failed&#39;)
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">excs = []
</span></span><span class="line"><span class="cl">for i in range(3):
</span></span><span class="line"><span class="cl">    try:
</span></span><span class="line"><span class="cl">        f()
</span></span><span class="line"><span class="cl">    except Exception as e:
</span></span><span class="line"><span class="cl">        e.add_note(f&#39;Happened in Iteration {i+1}&#39;)
</span></span><span class="line"><span class="cl">        excs.append(e)
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">raise ExceptionGroup(&#39;We have some problems&#39;, excs)
</span></span><span class="line"><span class="cl">  + Exception Group Traceback (most recent call last):
</span></span><span class="line"><span class="cl">  |   File &#34;&lt;stdin&gt;&#34;, line 1, in &lt;module&gt;
</span></span><span class="line"><span class="cl">  |     raise ExceptionGroup(&#39;We have some problems&#39;, excs)
</span></span><span class="line"><span class="cl">  | ExceptionGroup: We have some problems (3 sub-exceptions)
</span></span><span class="line"><span class="cl">  +-+---------------- 1 ----------------
</span></span><span class="line"><span class="cl">    | Traceback (most recent call last):
</span></span><span class="line"><span class="cl">    |   File &#34;&lt;stdin&gt;&#34;, line 3, in &lt;module&gt;
</span></span><span class="line"><span class="cl">    |     f()
</span></span><span class="line"><span class="cl">    |     ~^^
</span></span><span class="line"><span class="cl">    |   File &#34;&lt;stdin&gt;&#34;, line 2, in f
</span></span><span class="line"><span class="cl">    |     raise OSError(&#39;operation failed&#39;)
</span></span><span class="line"><span class="cl">    | OSError: operation failed
</span></span><span class="line"><span class="cl">    | Happened in Iteration 1
</span></span><span class="line"><span class="cl">    +---------------- 2 ----------------
</span></span><span class="line"><span class="cl">    | Traceback (most recent call last):
</span></span><span class="line"><span class="cl">    |   File &#34;&lt;stdin&gt;&#34;, line 3, in &lt;module&gt;
</span></span><span class="line"><span class="cl">    |     f()
</span></span><span class="line"><span class="cl">    |     ~^^
</span></span><span class="line"><span class="cl">    |   File &#34;&lt;stdin&gt;&#34;, line 2, in f
</span></span><span class="line"><span class="cl">    |     raise OSError(&#39;operation failed&#39;)
</span></span><span class="line"><span class="cl">    | OSError: operation failed
</span></span><span class="line"><span class="cl">    | Happened in Iteration 2
</span></span><span class="line"><span class="cl">    +---------------- 3 ----------------
</span></span><span class="line"><span class="cl">    | Traceback (most recent call last):
</span></span><span class="line"><span class="cl">    |   File &#34;&lt;stdin&gt;&#34;, line 3, in &lt;module&gt;
</span></span><span class="line"><span class="cl">    |     f()
</span></span><span class="line"><span class="cl">    |     ~^^
</span></span><span class="line"><span class="cl">    |   File &#34;&lt;stdin&gt;&#34;, line 2, in f
</span></span><span class="line"><span class="cl">    |     raise OSError(&#39;operation failed&#39;)
</span></span><span class="line"><span class="cl">    | OSError: operation failed
</span></span><span class="line"><span class="cl">    | Happened in Iteration 3
</span></span><span class="line"><span class="cl">    +------------------------------------
</span></span></code></pre></td></tr></table>
</div>
</div>]]></content:encoded>
    </item>
  </channel>
</rss>
