make error print their strings as well as values.
diff --git a/checkers.go b/checkers.go
index 335fc59..00766ec 100644
--- a/checkers.go
+++ b/checkers.go
@@ -229,7 +229,7 @@
 	}
 	valueStr, valueIsStr := value.(string)
 	if !valueIsStr {
-		if valueWithStr, valueHasStr := value.(hasString); valueHasStr {
+		if valueWithStr, valueHasStr := value.(stringer); valueHasStr {
 			valueStr, valueIsStr = valueWithStr.String(), true
 		}
 	}
diff --git a/gocheck.go b/gocheck.go
index 9dcc2d4..a57ccdd 100644
--- a/gocheck.go
+++ b/gocheck.go
@@ -5,9 +5,9 @@
 	"errors"
 	"fmt"
 	"io"
+	"math/rand"
 	"os"
 	"path"
-	"rand"
 	"reflect"
 	"regexp"
 	"runtime"
@@ -149,29 +149,38 @@
 	}
 }
 
-type hasString interface {
+type stringer interface {
 	String() string
 }
 
+func hasStringOrError(x interface{}) (ok bool) {
+	_, ok = x.(stringer)
+	if ok {
+		return
+	}
+	_, ok = x.(error)
+	return
+}
+
 func (c *C) logValue(label string, value interface{}) {
 	if label == "" {
-		if v, ok := value.(hasString); ok {
-			c.logf("... %#v (%q)", value, v.String())
+		if hasStringOrError(value) {
+			c.logf("... %#v (%q)", value, value)
 		} else {
 			c.logf("... %#v", value)
 		}
 	} else if value == nil {
 		c.logf("... %s = nil", label)
 	} else {
-		if v, ok := value.(hasString); ok {
+		if hasStringOrError(value) {
 			fv := fmt.Sprintf("%#v", value)
-			qv := fmt.Sprintf("%q", v.String())
+			qv := fmt.Sprintf("%q", value)
 			if fv != qv {
-				c.logf("... %s %s = %s (%s)", label, reflect.TypeOf(value).String(), fv, qv)
+				c.logf("... %s %s = %s (%s)", label, reflect.TypeOf(value), fv, qv)
 				return
 			}
 		}
-		c.logf("... %s %s = %#v", label, reflect.TypeOf(value).String(), value)
+		c.logf("... %s %s = %#v", label, reflect.TypeOf(value), value)
 	}
 }