メッセージ

ここでは、プログラムの開発や実行の際に英語で表示されるエラーメッセージや警告メッセージについて例を示して説明します。ここでは特定のプログラミング言語の特定のメッセージについて説明するのではなく、できるだけ多くのケースに対応できるように、重要な語や表現に焦点を当てます。そのため、ここで示すメッセージは架空のメッセージである場合や特定の環境で報告されるメッセージです。環境によって実際に表示されるメッセージの詳細は異なることがあります。

メッセージについて

現在の最新のソフトウェアの多くは、必要に応じて日本語の適切なメッセージを出力するようになりました。しかし、新しい技術やブラウザで実行できるツール、一部のOSなどでは、まだまだ英語のメッセージが多くみられます。

メッセージでは、英文法に則らない、極端な省略が行われることがあります。ごく簡潔な文の断片や、主語のない文、単語や熟語だけが表示される場合があります。具体例はこのあとで示します。

メッセージの表示

多くの場合、警告やエラーのメッセージは自動的に表示されます。たとえば、システムの起動時に起動できないような何らかのエラーが発生した場合は、コンソールにエラーが表示されます。

プログラミング言語の場合は、デフォルトで、プログラムをコンパイルしたり実行したりすると発生した問題に対するメッセージが自動的に報告されるのが普通です。ただし、HTMLに埋め込まれたJavaScriptコードを実行しようとした際のメッセージなどは、以下に示すような方法で明示的に表示しなければならない場合があります。

ブラウザでのエラーの検出

Google Chrome、Mozila Firefox、Microsoft EdgeなどのJavaScriptに対応しているWebブラウザは、JavaScriptを含むWebページの開発をサポートする機能を備えていて、スクリプトの実行時にエラーが発生した場所や原因などの情報を表示することができます。

Mozila Firefoxのメニューには、[ウェブ開発]に次の図に示すような一連のメニュー項目があります(バージョンによって詳細は異なります)。

Firefoxの[ウェブ開発]メニュー

Mozila Firefoxで[ウェブ開発ツール]を選択すると次の図に示すような情報が表示されます。

 Firefoxの「ウェブ開発ツール」

ここで表示されているメッセージは、strict_error.htmlの24行目でagiという宣言されていない変数に値を代入していると指摘しています。このようなエラーはstrictモードで明らかになります(もちろん、単純なエラーはstrictモードでなくても指摘されます)。

Microsoft Edgeでは、メニューから[その他のツール]-[開発者ツール]を選択することによって同様の開発に役立つ機能を使うことができます。

Microsoft Edgeの開発者ツールのコンソールの例

Microsoft Edgeの開発者ツールのコンソールの例

Google Chromeでは、メニューから[その他のツール]-[デベロッパーツール] を選択することによって同様の開発に役立つ機能を使うことができます。

これらのWebブラウザの機能を使って、HTMLの間違いやJavaScriptのスクリプトのエラーの場所と原因を特定したり、ログを見たりすることができます。

OSのメッセージ

ここではシステムを起動したり、コマンドを実行しようとしたときに典型的な表現を取り上げます。

no

「No ~」というメッセージが表示されることがあります。

たとえば、パソコンを起動したときに次のようなメッセージが表示されて起動しないことがあります。

No bootable device -- Please restart system

ブート可能なデバイスがありません。システムを再起動してください。

日本語訳は英文のあとに示した通りですが、おそらくシステムを再起動しても同じメッセージが表示されるだけでしょう。

このような「No ~」というメッセージが出力されることはありがちですが、現象だけを示していることが多く、原因までは説明していません。この場合、ハードディスクやSSD(Solid State Drive、ソリッドステートドライブ)のような起動のためのコードが含まれているデバイスが、壊れているか、接続が不完全であることが原因であることがよくあります。この種のメッセージを有効に利用するためには、単にメッセージを訳すだけでなく、メッセージが示唆する事柄の原因を推察することが必要になります。

さらに別の例を示します。

コマンドを実行しようとしたときに表示されることがあるメッセージに、たとえば次のようなメッセージがあります。

No such file or directory

そのようなファイルまたはディレクトリはありません。

この簡潔なメッセージも事実を指摘しているだけです。この場合、次のような可能性が考えられます。

・システムに指定したファイルまたはディレクトリ(フォルダー)が実際にない。

・タイプミスなどで名前を間違えて指定している。

・指定したファイルまたはディレクトリがあるが、現在作業中のディレクトリからはアクセスできない。

not found

LinuxなどUNIX系OSやUNIX 系の環境を構成するCygwin などでプログラムを実行しようとすると、次のようなメッセージが出力されることがあります。


$ a.exe
-bash: a.exe: command not found

「command not found」は文字通り「コマンドが見つからない」という意味ですが、この場合、コマンドとして実行されるファイルが実際に存在しない場合のほかに、 コマンドの指定方法が間違っているというケースがあります。 もしカレントディレクトリにa.exeがあるのにこのメッセージが出力されるなら、パス名とファイル名を正しく指定していないのが原因です。 その場合は、現在のディレクトリを表す「./」をファイル名の前につけて次のようにします。


$ ./a.exe
LinuxなどUNIX系OSならたとえば次のようにします。


$ ./a.out

これでファイルが見つかるようになります。

missing

あるべきプログラムやデータがない場合にmissingが使われることがあります。

The Boot Configuration Data for your PC is missing.

お使いのPCのブートコンフィギュレーションデータがありません。

お使いのPCの起動設定データがありません。

これは、PCのブート時(起動時)に必要な設定ファイル(Configuration File)が壊れたか、HDDやSDDの故障か交換したか、 あるいは接続が不完全な状態になったような問題が発生したときに報告されるメッセージです。

エラーメッセージ

エラーメッセージは、プログラムの実行ができないようなコマンドの間違いや、プログラムそのものに間違いがあることを表します。

syntax error

syntax error(シンタックスエラー)は、 プログラミング言語の仕様に照らしてプログラムの構文の誤りがあるときに報告されます。 通常は、プログラムの書き方が正しくないことを、コンパイラやインタープリタなどが検出したときに報告されます。

次の例はPythonで間違っているコードを実行しようとしている例です。

「invalid syntax」は「無効なシンタックス(構文)」という意味です。


>>> a = 12 + "Hwllo'
  File "<stdin>", line 1
    a = 12 + "Hwllo'
                   ^
SyntaxError: EOL while scanning string literal

「EOL while scanning string literal」は、文字列リテラルをスキャンしているときにEOL(End of line、行末)を検出したという意味です。

このプログラムでは、「a = 12 + "Hwllo'」の文字列「"Hwllo'」が正しく閉じていません。「a = 12 + "Hwllo"」とするのがPythonの文法的に正しいコードです。

次の例もPythonで間違っているコードを実行しようとしている例です。


>>> a = (2,3]
  File "<stdin>", line 1
    a = (2,3]
            ^
SyntaxError: invalid syntax

これは、「a = (2,3] 」というコードの ( で始まっているセクションの最後が ] で閉じているので、構文上の間違いです。次のように修正すれば正常に実行できます。


>>> a = (2,3)
>>> a
(2, 3)
  

syntax errorは「構文が間違っている」ということを意味しています。しかし、報告されるのがsyntax errorだけの場合は「構文が間違っている」ということを知らせるだけで、どのように間違っているかはわからない、やや不親切なエラーメッセージであるといえます。

たとえば、PHPで「Parse error: syntax error, unexpected 'xxx'」と報告される場合は、構文解析する際に発生したエラー(Parse error)であり、予期しないxxxがあるという文法的な間違いを報告しています。この場合にはさまざまな可能性がありますが、タイプミス、(に対応する)がない、{に対応する}がないなどの単純な間違いが多いでしょう。PHPの対話シェルでは、{や(の前で改行するとこのエラーになってしまうことがあります。いずれにしろ、このような単にsyntax errorというメッセージの場合は、文法的に間違いがあることだけを示していて、具体的な間違いを指摘しない場合がよくあります。

単にsyntax errorが報告される場合は「構文が間違っている」ということだけを意味しますが、最近のコンパイラやインタープリタは、あとで示すようなより具体的な構文に関するメッセージを出力する傾向にあります。

invalid sysntax

sysntax errorのひとつであるinvalid sysntaxもシンタックス(構文)が間違っていることを表します。

次の例は変数xの値が10以上なら「xは10以上」と出力するPythonの正しいプログラムです。


x = 10
if x > 9:
     print ("xは10以上")

しかし、if文の行末の:(コロン)を忘れて「if x > 9」を実行しようとすると、次のようなメッセージが出力されます。


>>> if x > 9
  File "<stdin>", line 1
    if x > 9
           ^
SyntaxError: invalid syntax

これは文字9のあとでシンタックスが無効であることを示してます。

この場合、さらに「print ("xは10以上")」を実行しようとすると、次のメッセージが表示されます。


>>>      print ("xは10以上")
  File "<stdin>", line 1
    print ("xは10以上")
    ^
IndentationError: unexpected indent

「IndentationError: unexpected indent」は「インデントの仕方の間違い:予期しないインデントがある」という意味ですが、これはこの行が間違っているのではなく、前の行のif文の行末の:(コロン)を忘れたために、インタープリタが勘違いして出しているメッセージです。この行事態に間違いはありません。前の行のif文の行末に:(コロン)を付ければ、この行は何の問題もなく実行できます。

invalid character

一見何も問題がなさそうな次のようなPythonのコードを実行したとします。


a = 10

すると、次のようなメッセージが報告されるでしょう。


  File "<stdin>", line 1
    a = 10
     ^
SyntaxError: invalid character in identifier

「invalid character in identifier」は、「識別子に無効な文字が使われている」という意味です。

この場合、aのあとにいわゆる全角空白が含まれています。そのため、Pythonのインタープリタはaに全角空白がつながったものを識別子(この場合は変数名)であるとみなして、このメッセージを出力しています。

ほとんどのプログラミング言語で、いわゆる全角空白は空白(ホワイトスペース、white space)とはみなされません。見た目でエラーがなさそうに見えてもエラーが報告される場合には、空白が入るべきところに全角空白が入っていないか確かめる必要があります。

stray '\343'

全角空白を含むC言語プログラムを見てみましょう。次のような問題がなさそうなプログラムをgccでコンパイルしてみます。


int main(int argc,char *argv[])
{
  int i;
     :

「int i」の「int」と「i」の間は全角空白です。これをコンパイルすると、次のようなメッセージが報告されるでしょう。


sample.c: In function 'main':
sample.c:3:6: error: stray '\343' in program
    3 |   int i;
      |      ^~

「stray sheep」といえば「迷える羊」ですので、「stray '\343'」は「'\343'が道に迷っている」という意味です。しかし、これではわかりにくいので少し補足すると、「16進数で文字コード343のバイトが道に迷っている」ということになります。「道に迷っている」というのは、コンパイラがこれを解釈しようと試みてみたけれど、解釈のしようがない、場違いなものに遭遇した、この先どのように進めたらよいのかわからない、というような状況です。

これを日本語に訳すなら、「16進数で文字コード343のバイトが無効なバイトである」とでもすると理解できるでしょう。

文字コードは常に343であるわけではありません。ファイルのエンコーディングによっても変わりますし、全角空白以外の他のいわゆる全角文字である場合にもstray '\xxx'が報告されます。

expected

expectedは、予期される、期待される、などの意味を持ちますが、さらに進んで「当然必要なものなのにそれがない」といいう意味で良く使われます。

次のようなプログラムをコンパイルするとします。


typedef struct Point {
  int x;
  int y;
} point

int main(int argc,char *argv[])
{
     :

すると、次のようなメッセージが出力されるでしょう。


expected ';' before 'int'

「'int'の前に';'が期待される」つまり「'int'の前に';'が必要なのにそれがない」という意味です。

これはC言語のプログラムの例ですが、C言語は比較的明快な言語です。この点に関して少々厄介な言語として、たとえばRust言語があります。

次のようなコードを実行しようとするものとします。


fn main() {
    let x = 3;
    let y = addone(x)
    println!("y = {}", y)
}

fn addone(n: i32) -> i32 {
    return n + 1
}

すると、次のようなメッセージが出力されます。


error: expected `;`, found `println`

これは、「`;`が必要だけれど、`println`があるエラー」というような意味で、「expected `;`」は前のC言語の例と同じです。そこで、「let y = addone(x)」の行末にセミコロンを入れて「let y = addone(x);」にすると、次のようになります。


fn main() {
    let x = 3;
    let y = addone(x);
    println!("y = {}", y)
}

fn addone(n: i32) -> i32 {
    return n + 1
}

これだと、「println!("y = {}", y)」の行と「return n + 1」の行末にセミコロン(;)がありません。しかし、これで正しいプログラムなのです。Rust言語の場合は、次のよう決まりがあります。

関数の最後の行(正確にはステートメント)末には、セミコロンを付けなくてよい。

そのため、上記のコードでなにも問題がないのです。言語のシンタックスを理解しておく必要があるひとつの例です。

メッセージでexpectedが使われる次のような例もあります(C言語、C++などの例)。


if (x <> 10) 
  x = 10;

これをコンパイルしようとすると、次のようなメッセージが報告される場合があります。


expected expression before '>' token

これを訳すと、「トークン'>'の前に式が必要」という意味になりますが、この場合、実際には式が必要なのではなくて、この言語には「<>」という演算子が定義されていないので、'>'をひとつのトークンと誤認しているのです。

正しくは「<>」の代わりに「!=」という演算子を使って次のようにします。


if (x != 10) 
  x = 10;

次のようなC言語のコードをコンパイルするとします。


#include <stdio.h>

int main(int argc,char *argv[])
{
  printf("Hello, C!\n");
  return 0;
  }
}

すると、次のようなメッセージが表示されることがあります。


test.c:8:1: error: expected identifier or '(' before '}' token
    8 | }
      | ^

「expected identifier or '(' before '}' token」は、「'}'の前に識別子か'('が必要である」という意味ですが、このプログラムの間違いは } が多すぎるという点です。これもexpectedが必要な何かが足りないことを指摘しているわけではありません。

not defined

JavaScriptを使って次のように0以上10未満の偶数を出力するプログラムを作りたいとします。


0 2 4 6 8

そのためにfor文を使って文字列「0 2 4 6 8」を作って、作った文字列をidが"txtspan"である要素に表示する次のようなプログラムを作ったものとします。


<span id="txtspan"></span>
<script type="application/javascript">
  var s = "";
  for (i = 0; i < 10; i+=2) {
    s = s + str(i) + " ";
  }
  var span = document.getElementById("txtspan");
  span.innerHTML = s;
</script>

これをHTMLに埋め込むかHTMLに読み込んで実行すると、開発者用のコンソールに次のようなエラーが報告されます。


Uncaught ReferenceError: str is not defined

「Uncaught ReferenceError」はキャッチされない参照エラーという意味ですが、これはエラーの種類を表していると考えてください。そのあとの「str is not defined」は、「strが定義されていない」という意味です。

ここではstr()を使って整数を文字列に変換しようとしていますが、実はこの場合、strという関数は存在しません。つまりstrが定義されていないということになります。

この場合、整数を文字列に変換して次々につなげてゆく式「s = s + str(i) + " ";」次のように修正すれば目的を達成できます。


s = s + String(i) + " ";

undeclared

変数を使う前に宣言しなければならないプログラミング言語で、「'xxx' undeclared」というメッセージが出力されることがあります。この意味は「'xxx'が宣言されていない」という意味です。

次の例は「0 2 4 6 8」を出力するC言語のプログラムで間違いを含むの例です。


#include <stdio.h>

int main(int argc, char* argv[])
{
  for (i = 0; i < 10; i++) {
    if (i % 2==0)
        printf("%d ", i);
  }
  return 0;
}

これをgccでコンパイルすると、次のようなエラーメッセージが報告されます。


test.c: In function 'main':
test.c:5:8: error: 'i' undeclared (first use in this function)
    5 |   for (i = 0; i < 10; i++) {
      |        ^
test.c:5:8: note: each undeclared identifier is reported only once for each function it appears in

「error: 'i' undeclared」は(変数として使っている)iが定義されていない、ということを指摘しています。

次のように「int i;」という変数宣言を追加すれば問題なくコンパイルして実行できます。


#include <stdio.h>

int main(int argc, char* argv[])
{
  int i;   // 変数宣言

  for (i = 0; i < 10; i++) {
    if (i % 2==0)
        printf("%d ", i);
  }

  return 0;
}

しかし、「undeclared」というメッセージを文字通り受け取ることができない場合があります。次にC言語のプログラム例を示します。


#include <stdio.h>

typedef struct Point {
  int x;
  int y;
} point;

int main(int argc,char *argv[])
{
  point p;
  p.x = 100;
  p.y = 50;
  printf("(x,y)=(%d,%d)\n", p.x, p,y);
  return 0;
}

これをコンパイルすると、例えば次のようなメッセージが出力されるでしょう。


test.c:13:35: error: 'y' undeclared (first use in this function)
   13 |   printf("(x,y)=(%d,%d)\n", p.x, p,y);

これは、「13行目の35文字目で'y'が宣言されていません(この関数の中の最初の使用)」という意味にとれます。しかし、その前の行の「p.y = 50;」で'y'が使われています。 そして、とてもよく似た使い方をしているxのほうは何も問題がないようです。

実はこのプログラムの間違いは、13行目の行の終わりのほうで「p.x, p.y」とするべきところを「p.x, p,y」としているという点です(カンマとピリオドの違いです)。

これもメッセージの文字通りの意味だけを考えていても問題が解決しない例です。メッセージを正しく理解するためには、 指摘されている内容(この場合はC言語というプログラミング言語)について理解しておく必要があります。

delimiter

次のようなRustのコードを実行しようとすると、unclosed delimiterが報告されます。


fn main() {
    println!("Hello, Rust")

あるいは次のようなRustのコードを実行しよとすると、unexpected closing delimiter: `}`が報告されます。


fn main() {
    println!("Hello, Rust")
    }
}

いずれも、{ に対応する } が適切でないことが原因です。

delimiter(デリミタ)は直訳すると区切り文字とか分離記号と訳されます。{ や } はコンパイラやインタープリタにとっては確かに区切り文字なのですが、このようなケースでは想像力を働かせて解釈する必要があります。

publicとprivate

変数や関数などのアクセスを可能にする範囲を規定するものにアクセス修飾子というものがあります。代表的なのはpublicとprivateで、これらはアクセス修飾子として使う場合には日本語に訳しません。

Access modifiers determine the scope of access permissions to members. Typical access modifiers are private and public, with private allowing access only from within the class and public allowing access from anywhere.

アクセス修飾子は、メンバーに対するアクセス許可の範囲を決定するものです。 代表的なアクセス修飾子にはprivateとpublicがあり、privateを指定するとクラスの中からのアクセスだけが可能になり、publicを指定するとどこからでもアクセスが可能になります。

たとえば、次のようなC++のプログラムがあるとします。


#include <iostream>

class Hello
{
    void print() {std::cout << "Hello!\n";};
};

int main()
{
    Hello a;    // インスタンス作成
    a.print();  // 出力
}

これはHelloといいう名前のクラスを定義して、Helloの中にprint()というメンバー関数を定義し、それを使う単純なmain()があるプログラムです。

これをコンパイルすると、次のようなエラーメッセージが報告されるでしょう。


cppsmpl.cpp: In function 'int main()':
cppsmpl.cpp:11:12: error: 'void Hello::print()' is private within this context
   11 |     a.print();  // 出力
      |     ~~~~~~~^~
cppsmpl.cpp:5:10: note: declared private here
    5 |     void print() {std::cout << "Hello!\n";};
      |          ^~~~~

メッセージの最初の行「In function 'int main()':」は関数main()の中に問題があることを示しています。

次の行の「cppsmpl.cpp:11:12: error:」(cppsmpl.cppの11行目12桁目でエラー)の後は次のような意味です。

'void Hello::print()' is private within this context

'void Hello::print()'はこのコンテキストの中でprivateです。

このプログラムのエラーに関して最も重要なのはこのprivateである云々という部分です。privateはクラスの中からのアクセスだけが可能という意味で、 この場合、Helloクラスの外側のmain()でprint()を呼び出しているのでエラーになっています。

これは次のように「public:」を追加すれば問題なくコンパイルして実行することができます。


class Hello
{
public:
    void print() {std::cout << "Hello!\n";};
};

public:はどこからでもアクセスが可能であるというアクセス修飾子で、この場合は、public を指定することでHelloクラスの外側のmain()でprint()を呼び出すことができるようになります。

アクセス修飾子には、publicとprivate以外にもさらに次のように示すようなものも使える場合があります。

良く使われるアクセス修飾子
アクセス修飾子解説
publicどこからでもアクセスが可能
friendプロジェクトの中からだけアクセスが可能
protectedクラスの中と派生クラスからアクセスが可能。
private protectedクラスの中と、プロジェクトの中の派生クラスからアクセスが可能。
protected friendプロジェクトの中、クラスの中と、派生クラスからアクセスが可能。
privateクラスの中からのアクセスだけが可能。

なお、上の表はさまざまなプログラミング言語で使われるアクセス修飾子をまとめたものであり、すべてのプログラミング言語でどれでも使えるわけではありません。 また、「解説」は一般的なアクセス範囲を示しているに過ぎません。使用できる修飾子とその厳密な意味はプログラミング言語によって異なります。

could not find driver

ドライバーが見つからないときに報告されます。たとえば、MySQLに接続しようとしてこのエラーが報告された場合は、PDOで接続するためのドライバーがインストールされていないか、 設定が適正でない可能性があります。

out of range

ほとんどのプログラミング言語で、同じ種類のものをまとめて扱うときにリスト(List)や配列(Array)というものを使います。 このとき、n番目(nは通常ゼロから始まります)の要素を識別するための値をindex(インデックス、添え字)といいます。

次の例はPythonで最初にaという変数に3つの要素を保存して表示する例です。


>>> a = [1,2,3]
>>> a
[1, 2, 3] 

続いて、次のようにaの7番目の要素の値を表示しようとすると、7番目の要素はないので、「IndexError: list index out of range」というメッセージが出力されます。


>>> a[6]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range

「index out of range」というのはインデックスの値が範囲を超えていることを意味し、ほかの言語でもほぼ同様なメッセージが出力されることがあります。

次の例は、存在していない要素に値を設定しようとする例です。


>>> a[7]=6
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list assignment index out of range

このエラーメッセージの意味は「リストの代入の際のインデックスが範囲外である」という意味で、この場合も、「out of range」と報告されます。

Fatal error

Fatal errorは、致命的なエラーであることを表します。多くの場合、Fatal errorが発生すると、プログラムの実行を継続できません。

たとえば、以下のようなメッセージが報告されることがあります。

Fatal error: Cannot redeclareXxx()

一度定義した関数を再定義できない言語で再定義すると報告されます。たとえばPHPの対話シェルで関数定義を間違えて入力したあとで修正した関数を入力したときにもこのメッセージが報告されます。

Fatal error: Cannot declare class Xxx, because the name is already in use

一度定義したクラスを再定義できない言語で一度定義したクラスは再定義できません。たとえばPHPの対話シェルでクラス定義を入力したあとで 修正したクラスを入力したときにもこのメッセージが報告されます。

Uncaught Error

exception(例外)と呼ばれるプログラムの実行を継続できないような重大な問題が発生すると、その例外をcatch して問題に対処するべきです。 しかし、すべての例外に対する対処を準備していいない場合もあります(「ハードとソフト」の「プログラミングと操作」の「exception」参照)。

coughtはcatchの過去形で、「Uncaught Error」はcatch(捕捉)されなかったエラー、つまり例外処理が行われていないエラーのことです。

Uncaught Error: Call to undefined function xxx()

これは「Uncaught Error」でより詳しい内容を示すメッセージです。

上のメッセージは、関数xxx()を呼び出せないときに報告されます。

PHPの場合は必要な拡張機能がロードされていない場合にこのメッセージが報告されます。その場合は必要な拡張機能を追加します。 たとえば、mb_xxx()を呼び出せない場合は、mbstringをロードできるようにphp.iniを設定します。

また、単純なタイプミスの可能性もあります。

Uncaught TypeError

「Uncaught Error」と同じように例外処理が行われていないエラーを報告するメッセージです。

Uncaught TypeError: xxx is null

「xxx is null」はxxxがnullである、つまり有効な値が設定されていないという意味です。

次の例は「Uncaught TypeError: span1 is null」と報告される間違いを含むコードの例です。


<body>
  <h2>偶数を出力する例</h2>
  <span id="txtspan"></span>
  <script type="application/javascript">
    var s = ""
    for (i = 0; i < 10; i+=2) {
      s = s + String(i) + " ";
    }
    var span1 = document.getElementById("textspan");
    span1.innerHTML = s;
  </script>
</body>

この例では要素のidを"txtspan"にしています。


<span id="txtspan"></span>

それにもかかわらず、後のほうの要素をidで指定して取得する次のコードでidを"textspan"にしています。


var span1 = document.getElementById("textspan");

そのため、要素が見つからず、document.getElementById()でnullが返され、それをspan1に代入しているので、 「span1.innerHTML = s;」を実行しようとした際に「Uncaught TypeError: span1 is null」と報告されます。

Uncaught TypeError: Assignment to constant variable.

定数の変数に値を代入しようとしたことが指摘されています。

たとえば、次のJavaScriptのコードでは、定数変数であるdogに別の値を設定しようとしているのでこのエラーが報告されます。


<script type="application/javascript">
    const dog = "Pochi"
      :
    dog = "Kenta"        // エラー
    spanelement.innerHTML = dog;
  </script>

この場合は、「定数の値はプログラムの実行中に変更できない」という知識が理解の基礎になります。

Uncaught ReferenceError

次の例はJavaScriptのスクリプトの断片の例です。


<script type="application/javascript">
  var a = sum (2,3)
   :

これを実行しようとすると、次のようなエラーメッセージが報告されます。


Uncaught ReferenceError: sum is not defined
    at jssample.html:12:13

「Uncaught ReferenceError」は参照のエラー(例外)がキャッチされていないという意味でその原因は次の「sum is not defined」、つまりsumが定義されていないからです。

たとえば次のように関数を定義すれば、問題は解決します。


<script type="application/javascript">
  function sum(x,y) {
    return x + y;
  }
  var a = sum (2,3)
   :

IndentationError

IndentationErrorは、インデント(Indent、コードを右にずらして入力すること)が正しくない場合に報告されます。

たとえば、Pythonで関数を定義するときには、最初に関数の名前を書式を定義して、以降の行で関数の内容をインデントしなければなりません。 Pythonで引数の値に1を加えて返す関数addOne()を定義する場合は、次のようにする必要があります。


def addOne(x):
    return x + 1

これを間違って、次のように関数の内容をインデントしないとIndentationErrorが報告されます。


def addOne(x):
return x + 1

Pythonのインタープリタ(対話シェル、interactive shell)で実行すると次のようになります。


>>> def addOne(x):
... return x + 1
  File "<stdin>", line 2
    return x + 1
         ^
IndentationError: expected an indented block

「expected an indented block」はインデントブロックがあるべきなにないことを示しています。

次のようにインデントして入力すれば、問題は解決します。


>>> def addOne(x):
...     return x + 1
...
>>>

このメッセージは、ブロックを表現するためにインデントを使うプログラミング言語で報告されます。 C言語やJavaなどのように{と}でブロックを表現する言語ではインデントはプログラムの解釈や実行に影響を与えません。

警告メッセージ

警告メッセージは、プログラムを実行できるけれど、なんらかの問題を含んでいることを表します。

implicit declaration

C言語でgccを使って次のようなプログラム(一部省略)をコンパイルしたとします。


#include <stdio.h>

int main(int argc,char *argv[])
{
  int num;
  num = atoi(argv[1]);
 
     :   /* 省略  */
}

すると、コンパイラによって、エラーになるか、あるいは次のような警告メッセージが出力されるでしょう。


sample.c: In function ‘main’:
sample.c:6:8: warning: implicit declaration of function ‘atoi’ [-Wimplicit-function-declaration]
    6 |  num = atoi(argv[1]);

このメッセージは、次のようなことを表しています。

・sample.cの関数mainに問題がある。

・sample.cの6行目の8文字目に警告。関数のatoiの暗黙の宣言。警告オプションは[-Wimplicit-function-declaration]

・6行目とは次の部分である「num = atoi(argv[1]);」

これは、関数atoiがどこでも宣言されていないが暗黙の宣言がされているものとしてコンパイルしましたよ、という警告です。

つまりメッセージは6行目のatoiという関数に対して警告しています。atoiという関数はstdlib.hというファイルで宣言されているので、この問題を解決するために必要なことは、2行目にstdlib.hを追加することです。


#include <stdio.h>
#include <stdlib.h>

int main(int argc,char *argv[])
{
  int num;
  num = atoi(argv[1]);
 
     :   /* 省略  */
}

この例のように、メッセージを文字通り翻訳しても正しい意味をとらえられないことがあるという点に注意が必要です。

このような場合の暗黙の宣言を扱わないコンパイラでコンパイルすると、これはエラーになります。状況によって同じ問題が異なるメッセージを出力することがあるという点にも注意を払う必要があります。

fopen(xxx): failed to open stream

ファイルxxxを開けません。ファイルxxxがないか、あるいは存在していてもアクセスが禁止されている場合はこの警告が報告されます。

ネットワーク関連メッセージ

ここではネットワークに関連したメッセージについて取り上げます。

404 not found

これは、存在しないページにアクセスすると報告されるメッセージで、404はHTTPステータスコードといいます。

英語としては見つからない対象となる語が省略されていますが、このメッセージが表示される場合がWebをブラウジングしているという前提なので、省略されているのはWebページであり、「Webページが見つからない」という意味になります。

このように特定の状況を前提として省略することはよく行われます。

Webブラウザなどに表示されるほかのHTTP レスポンスのステータスコードは、以下のサイトをはじめとしてさまざまな情報がインターネット上にあります。


https://developer.mozilla.org/ja/docs/Web/HTTP/Status

mail(): Faild to connect to mailserver

メールサーバーに接続できません。

たとえば、PHPでメールを送ろうとしているなら、メールサーバーをインストールしてPHPプログラムから利用できるようにphp.iniのSMTPとsmtp_portを適切に設定します(具体的方法は環境に依存します)。

インストール

インストール中にたとえば次のようなメッセージを含むダイアログボックスが表示されることがあるでしょう。

Warning:Installing unsigend software for which the authenticity or validity cannot be established. Continue with the installation?

警告:真正性または有効性が確立されていない未承認のソフトウェアをインストールしています。インストールを続行しますか?

これは文字通り警告なので、ダイアログボックスの中の適切なボタン([Install]、[Cancel]、[Yes]、[No]など)をクリックします。

インストールの際によく表示されるダイアログボックスの中のチェックボックスのメッセージに次のようなものがあります。

Create Shortcut on Desktop

デスクトップにショートカットを作成しますか?

いつも良く考えずにこのチェックボックスをチェックしたままインストールを続けると、デスクトップがインストールしたアプリのアイコンでいっぱいになってしまいます。

バージョン

ファイルやプロジェクト、ワークスペースなどのデータのバージョンが古い場合に、次のようなメッセージを含むダイアログボックスが表示されることがあります。

The Xxx workspace was written with an older version. Continue and update workspace whick may make it incompatible with older versions?

Xxxワークスペースは、古いバージョンで作成されています。古いバージョンと互換性がなくなる可能性がある新しいバージョンに更新しますか?

この場合、古いバージョンと互換性がなくなる、という点に注目することが重要です。多くの場合に古いバージョンのファイルはもう使わないでしょうから新しいバージョンに更新してもかまいませんが、 古いバージョンを使う可能性がある場合はそれを別に保存しておくなどの対処が必要になります。


inserted by FC2 system